【问题标题】:Coding an iterated sum of sums in python在python中编码总和的迭代总和
【发布时间】:2018-12-17 00:16:33
【问题描述】:

对于 alpha 和 k 固定整数,i

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

对于在一个索引上变化的正常总和,我通常创建一个一维数组 A 并将 A[i] 设置为总和的第 i 个索引条目,然后使用 sum(A),但在上面的例子中,最里面的条目sum 取决于前一个 sum 中的索引,而前一个 sum 中的索引又取决于之前 sum 中的索引,一直返回到第一个 sum,这使我无法直接使用这种机智。

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

一个总和,它允许在它求和的数组的每个位置填充一个“变量”,因此可以解决问题,但我在 numpy 中找不到任何沿着这些线的东西,因此我尝试将一个组合在一起远远失败了——我的直觉说有一个解决方案涉及沿 k-i 维数组的轴求和,但我还不能做到这一点。非常感谢任何帮助。

【问题讨论】:

    标签: python arrays sum


    【解决方案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 的所有总和进行了此操作)

    【讨论】:

    • 对于 k 小或 i 接近 k 这可行,但我需要 k>1000(可能大得多),并且我一直降到 0。
    • 我对代码是否运行以及它的执行方式感兴趣。所以请随时告诉我。 :D
    • 非常感谢 - 我现在在工作,我回家试试看。
    【解决方案2】:

    这与@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)
    

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

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2021-10-18
      • 2018-09-08
      • 1970-01-01
      相关资源
      最近更新 更多