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,我犯了一个错误,是的-滑动被转置了。我已经纠正了它,并验证了我得到了预期的错误。