numpy python中的多个数组

ctzwtxfj  于 2023-11-18  发布在  Python
关注(0)|答案(3)|浏览(104)

我有一些数组,我希望使用加法将它们广播到一个数组中,我知道可以简单地这样做:

a = numpy.array([1,2,3])
b = numpy.array9[4,5,6])
sum = a + b
print(sum)

[5,7,9]

字符串
然而,我不能像这个简单的例子一样硬编码,因为我会用不同数量的输入运行我的脚本很多次,所以每次都会有不同数量的数组。有时,我可能有a和b,但其他时候我可能有a,c和d,但没有b等等。
因此,我使用一个循环将我拥有的数组追加到一个列表中,这样我就得到了这样的结果:

newlist = [array([1,2,3,...5,4,3]), 
          array([5,7,2,...4,6,7]),
          array([3,6,2,...4,5,9])]


什么是从'newlist'中的数组中获取单个数组的最pythonic方法,这是其中的数组的添加,这样(从newlist):

sum = [8,15,7,...14,15,19]


数组都是相同的形状。

cvxl0en2

cvxl0en21#

坚持使用Numpy数组并使用它的sum()方法:

>>> arr = np.array([[1,2,3,5,4,3], 
          [5,7,2,4,6,7],
          [3,6,2,4,5,9]])
>>> arr.sum(axis=0)
array([ 9, 15,  7, 13, 15, 19])

字符串
当然,你也可以用Python列表来做,但它会很慢:

>>> lst = [[1,2,3,5,4,3], 
          [5,7,2,4,6,7],
          [3,6,2,4,5,9]]
>>> map(sum, zip(*lst))
[9, 15, 7, 13, 15, 19]

smtd7mpg

smtd7mpg2#

不需要从已有的1D数组创建2D数组。它肯定不会比将它们加在一起更快,例如使用reducenp.add

In [14]: a = [np.random.rand(10) for _ in range(10)]

In [15]: %timeit np.array(a).sum(axis=0)
100000 loops, best of 3: 10.7 us per loop

In [16]: %timeit reduce(np.add, a)
100000 loops, best of 3: 5.24 us per loop

字符串
对于更大的阵列,它甚至更没有优势:

In [17]: a = [np.random.rand(1000) for _ in range(1000)]

In [18]: %timeit np.array(a).sum(axis=0)
100 loops, best of 3: 6.26 ms per loop

In [19]: %timeit reduce(np.add, a)
100 loops, best of 3: 2.43 ms per loop


当然还有:

In [20]: np.allclose(np.array(a).sum(axis=0), reduce(np.add, a))
Out[20]: True

ivqmmu1c

ivqmmu1c3#

这里是另一种方法:

import numpy as np

arr1 = np.array([1,2,3,5,4,3])
arr2 = np.array([5,7,2,4,6,7])
arr3 = np.array([3,6,2,4,5,9])

out_arr = np.add(arr1, arr2)   
out_arr1 = np.add(out_arr, arr3) 
  
print("added array : ", out_arr1)  

# added array :  [ 9 15  7 13 15 19]

字符串

相关问题