数学问题是:
总和中的表达式实际上比上面的表达式复杂得多,但这是一个最小的工作示例,不会使事情复杂化。我已经使用6个嵌套的for循环在Python中编写了此代码,并且正如预期的那样,即使在Numba,Cython和朋友的帮助下,它的性能也很差(真正的形式效果很差,需要评估数百万次)。在这里,它是使用嵌套的for循环和累积和编写的:
import numpy as np
def func1(a,b,c,d):
'''
Minimal working example of multiple summation
'''
B = 0
for ai in range(0,a):
for bi in range(0,b):
for ci in range(0,c):
for di in range(0,d):
for ei in range(0,ai+bi):
for fi in range(0,ci+di):
B += (2)**(ei-fi-ai-ci-di+1)*(ei**2-2*(ei*fi)-7*di)*np.math.factorial(ei)
return a, b, c, d, B
Run Code Online (Sandbox Code Playgroud)
表达控制与4个数字作为输入,并为func1(4,6,3,4)输出为B是21769947.844726562。
我到处寻找帮助,并找到了一些Stack帖子,其中包括一些示例:
向量化具有不同数组形状的Python / Numpy中的Triple for循环
我尝试使用从这些有用的帖子中学到的知识,但是经过多次尝试,我一直得出错误的答案。即使对其中一个和进行矢量化处理,也将为真正的问题带来巨大的性能提升,但是和范围不同的事实似乎使我无法接受。有人对如何进行此操作有任何提示吗?