假设我有一个数组a = array([a0, a1,..., an])
。对于数组中的每个元素,我需要在从左到右的方向上找到所有累积和。因此,对于n=2
,我必须找到
a0, a0+a1, a0+a1+a2, a1, a1+a2, a2
。
显而易见的方法如下:
list_of_sums = [np.cumsum(a[i:]) for i in xrange(n+1)]
我想知道是否有更有效的方法来做到这一点。问题是n
可能非常大,另外我想要为相同长度的许多不同数组a
广播它。不幸的是,我没有成功为此创建一个矢量化函数。
另一个问题是如何存储所有这些总和。我们可以将所有数据表示为2D
数组A
,而不是使用列表,在第一列A[:,0]
中我将a0
作为第一项的所有总和,在第二列A[:,1]
中,我将a1
作为第一项的所有总和,依此类推。这给了我们(n+1)x(n+1)
矩阵,其中半个元素是零(右下三角形)。另一方面,这需要比列表使用多2倍的内存,或者强迫我们使用可能过度的稀疏矩阵。