Python 使用多个数组的Numpy add

Python 使用多个数组的Numpy add,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,有没有一种方法可以在一次操作中将多个数组相加(而不是求和)?显然,np.sum和np.add是不同的操作,然而,我现在正在努力解决的问题是np.add一次只需要两个数组。我可以利用任何一个 output = 0 for arr in arr_list: output = output + array 或 是的,这是可行的。不过,如果我能简单地做一些 output = np.add_multiple(arr_list) 这是否存在 编辑: 一开始我没有弄清楚。我特别需要一个不需要构建阵

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

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

是的,这是可行的。不过,如果我能简单地做一些

output = np.add_multiple(arr_list)
这是否存在

编辑: 一开始我没有弄清楚。我特别需要一个不需要构建阵列阵列的函数,因为我的阵列尺寸不相等,需要广播,例如:

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)
np.sum([a,b],轴=0)
np.add.reduce([a,b])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:无法将输入数组从形状(3,1,1)广播到形状(1)
为了获得更多乐趣:

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


加上广播:

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
,因为我认为您需要添加两个以上的数组

只要阵列一起广播,所有这些都可以工作

为了获得更多乐趣:

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


加上广播:

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
,因为我认为您需要添加两个以上的数组


只要阵列一起广播,所有这些都可以工作

您只需使用Python的
sum
内置:

output = sum(arr_list)

对于许多其他
numpy
函数,可以按@hpaulj所示使用。

您可以使用Python的
sum
内置:

output = sum(arr_list)
对于许多其他
numpy
函数,可以按@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))
您可以使用
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))


谢谢你的回复,但这不起作用!我询问
添加
,因为我不清楚的一个具体原因,我的错误。谢谢你的回复,但这不起作用!我询问
添加
,因为我不清楚的一个具体原因,我的错误。谢谢你的回复,但这不起作用!我询问
add
,因为我不清楚的一个具体原因,我的错误。如果
a
b
的第一维度匹配,并且由于一些未知原因不需要广播,则broardcasting看起来会失败。给出了一个示例。所有这些方法都需要相同的广播-能够执行
a+b
。请注意@hpaulj,我确实想添加两个以上的数组,因为这是最基本的,所以我在示例中只使用了两个。感谢您的回复,但这不起作用!我询问
add
,因为我不清楚的一个具体原因,我的错误。如果
a
b
的第一维度匹配,并且由于一些未知原因不需要广播,则broardcasting看起来会失败。给出了一个示例。所有这些方法都需要相同的广播-能够执行
a+b
。请注意@hpaulj,我确实想添加两个以上的数组,我在示例中只使用了两个数组,因为它是最基本的。令我大吃一惊的是,这确实有效。非常感谢。有趣的是,为什么Python内置的sum函数能够处理numpy数组?让我大吃一惊的是,这确实有效。非常感谢。有趣的是,为什么Python的内置sum函数能够处理numpy数组?这个错误来自哪里?我在任何地方都看不到定义了形状(3,1,1)的数组。据我所知,它来自输入数组上的
np.sum
np.add
调用
np.array
,在这种情况下,
[a,b]
,它试图将它投射到各个维度的矩形阵列中,而不是广播。@Firnagzen实际上我无法重现你在帖子中提到的错误。你确定输入的
a
b
写得正确吗?嘿@GZ0,我犯了一个错误,是的-滑动被转置了。我已经更正了它并验证了我得到了预期的错误。这个错误是从哪里来的?我在任何地方都看不到定义了形状(3,1,1)的数组。据我所知,它来自输入数组上的
np.sum
np.add
调用
np.array
,在这种情况下,
[a,b]
,它试图将它投射到各个维度的矩形阵列中,而不是广播。@Firnagzen实际上我无法重现你在帖子中提到的错误。你确定输入的
a
b
写得正确吗?嘿@GZ0,我犯了一个错误,是的-滑动被转置了。我已经纠正了它,并验证了我得到了预期的错误。