数组中

时间:2016-01-29 11:09:42

标签: python arrays algorithm numpy cumsum

假设我有一个数组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倍的内存,或者强迫我们使用可能过度的稀疏矩阵。

0 个答案:

没有答案