Numpy 添加多个数组

Numpy add with multiple arrays

有没有办法在一次操作中将多个数组相加(而不是求和)?显然,np.sumnp.add 是不同的操作,但是,我现在正在努力解决的问题是 np.add 一次只需要两个数组。我可以利用

output = 0
for arr in arr_list:
    output = output + array

output = 0
for arr in arr_list:
    output = np.add(output, array)

而且,是的,这是可行的。但是,如果我可以简单地做一些

的变体,那就太好了
output = np.add_multiple(arr_list)

这个存在吗?

编辑: 我一开始没说清楚。我特别需要一个 not 需要构造数组的 array 的函数,因为我的数组维度不相等并且需要广播,因为示例:

a = np.arange(3).reshape(1,3)
b = np.arange(9).reshape(3,3)

a, b = a[:,:,None,None], b[None,None,:,:]

这些工作:

a + b        # Works
np.add(a, b) # Works

这些不是,并且失败并出现相同的异常:

np.sum([a, b], axis = 0)
np.add.reduce([a, b])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (3,1,1) into shape (1)
In [18]: alist = [np.arange(4),np.ones(4),np.array([10,1,11,2])]                
In [19]: np.add.reduce(alist)                                                   
Out[19]: array([11.,  3., 14.,  6.])
In [20]: alist[0]+alist[1]+alist[2]                                             
Out[20]: array([11.,  3., 14.,  6.])

更多乐趣:

In [21]: np.add.accumulate(alist)                                               
Out[21]: 
array([[ 0.,  1.,  2.,  3.],
       [ 1.,  2.,  3.,  4.],
       [11.,  3., 14.,  6.]])

编辑


In [53]: a.shape                                                                
Out[53]: (1, 1, 1, 3)
In [54]: b.shape                                                                
Out[54]: (3, 3, 1, 1)

加上广播:

In [63]: sum([a,b]).shape                                                       
Out[63]: (3, 3, 1, 3)
In [64]: (a+b).shape                                                            
Out[64]: (3, 3, 1, 3)
In [66]: np.add.reduce([a,b]).shape                                             
Out[66]: (3, 3, 1, 3)

为了它的价值,我建议 add.reduce 因为我认为你想要添加超过 2 个数组。

只要阵列一起广播,所有这些都有效。

您可以只使用 Python 的 sum 内置:

output = sum(arr_list)

对于许多其他 numpy 函数,np.<ufunc>.reduce 可以如@hpaulj 所示使用。

您可以使用 sum() 添加多个数组。

arr = np.array([[6,2,3,5,4,3], 
          [7,7,2,4,6,7],
          [10,6,2,4,5,9]])
np.add(0, arr.sum(axis=0))