如何将m个大小(m * n,)的numpy数组相加?

时间:2015-04-11 14:08:42

标签: python numpy

假设我a a.shape (m*n,) m,我如何创建一个新数组,其中包含每组n元素的a.reshape((m, n)).sum(axis=1) 总和有效地

我想出的最好的是:

{{1}}

但这会创建一个额外的新阵列。

2 个答案:

答案 0 :(得分:6)

我认为使用reshape然后获取行的总和没有任何问题,我想不出更快的事情。根据{{​​3}},reshape应该(如果可能)返回原始数组的视图,因此不会复制大量数据。创建视图时,numpy只会创建一个具有不同步幅和形状的新标题,并带有指向原始数组数据的指针。这应该花费恒定的时间和内存,与数组大小无关。

In [23]: x = np.arange(12)

In [24]: y = x.reshape((3, 4))

In [25]: y
Out[25]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [26]: y.base is x  # check if it is a view
Out[26]: True

答案 1 :(得分:3)

还有另一个技巧,cumsumreduceat上的变体。在这种情况下

np.add.reduceat(a, np.arange(0,m*n,n))

对于m,n=100,10,它的速度是x.reshape((m,n)).sum(axis=1)的2倍。

我没有太多使用它,所以在文档中花了一些时间进行挖掘。