Numpy 添加多个数组
Numpy add with multiple arrays
有没有办法在一次操作中将多个数组相加(而不是求和)?显然,np.sum
和 np.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))
有没有办法在一次操作中将多个数组相加(而不是求和)?显然,np.sum
和 np.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))