对于i 其中所有x和y变量都是预先已知的。 (本质上是大迭代矩阵向量乘法的alpha坐标) 对于在一个索引上变化的普通和,我通常创建一个1d数组A并将A [i]设置为等于和的i索引条目,然后使用sum(A),但在上述情况下,最里面的条目总和取决于先前总和中的索引,而总和又取决于之前总和中的索引,一直返回到第一总和,这使我无法直接使用此方法。 我尝试制作一个长度和宽度合适的2D数组B,并将0行设置为最里面总和的条目,然后将1行设置为下一个总和乘以 一个总和允许在要求和的数组的每个位置填充一个“变量”,因此可以解决问题,但是我在numpy中找不到沿着这些方向的任何东西,因此我尝试一起破解远远失败了-我的直觉说,有一个解决方案,涉及沿着ki维数组的轴求和,但是我还无法做到这一点。非常感谢您的协助。sum(np.transpose(B),0)
的条目,依此类推,但第1行(第0行)的总和的值需要随第1行中的每个条目而变化,因为该总和仍然具有取决于我们在第1行中的位置的索引,依此类推,一直到ki为止。>
答案 0 :(得分:1)
一个简单的尝试将类似的东西硬编码为
for j0 in range(0,n0):
for j1 in range(0,n1):
....
编辑:(矢量化版本)
您可以执行以下操作:(我没有对其进行测试)
temp = np.ones(n[k-i])
for j in range(0,k-i):
temp = x[:n[k-i-1-j],:n[k-i-j]].T@(y[:n[k-i-j]]*temp)
result = x[alpha,:n[0]]@(y[:n[0]]*temp)
基本思想是您尝试将其按矩阵向量形式。 (请注意,这是python3语法)
编辑:您应该注意,您需要将“ k-1”更改为最里面的总和(我只是对所有直到索引k-i的总和都这样做了
答案 1 :(得分:0)
这与@sehigle的答案具有95%的相同性,但包含通用的N
向量:
def nested_sum(XX, Y, N, alpha):
intermediate = np.ones(N[-1], dtype=XX.dtype)
for n1, n2 in zip(N[-2::-1], N[:0:-1]):
intermediate = np.sum(XX[:n1, :n2] * Y[:n2] * intermediate, axis=1)
return np.sum(XX[alpha, :N[0]] * Y[:N[0]] * intermediate)
类似地,我对表达式一无所知,所以我不确定如何构建适当的测试。但它运行:\