在python中编码总和的迭代和

时间:2018-12-17 00:16:34

标签: python arrays sum

对于i 进行编码

其中所有x和y变量都是预先已知的。 (本质上是大迭代矩阵向量乘法的alpha坐标)

对于在一个索引上变化的普通和,我通常创建一个1d数组A并将A [i]设置为等于和的i索引条目,然后使用sum(A),但在上述情况下,最里面的条目总和取决于先前总和中的索引,而总和又取决于之前总和中的索引,一直返回到第一总和,这使我无法直接使用此方法。

我尝试制作一个长度和宽度合适的2D数组B,并将0行设置为最里面总和的条目,然后将1行设置为下一个总和乘以sum(np.transpose(B),0)的条目,依此类推,但第1行(第0行)的总和的值需要随第1行中的每个条目而变化,因为该总和仍然具有取决于我们在第1行中的位置的索引,依此类推,一直到ki为止。

一个总和允许在要求和的数组的每个位置填充一个“变量”,因此可以解决问题,但是我在numpy中找不到沿着这些方向的任何东西,因此我尝试一起破解远远失败了-我的直觉说,有一个解决方案,涉及沿着ki维数组的轴求和,但是我还无法做到这一点。非常感谢您的协助。

2 个答案:

答案 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)

类似地,我对表达式一无所知,所以我不确定如何构建适当的测试。但它运行:\