有没有一种快速的方法来做到这一点;
import numpy as np
a=np.array([1,2,3,4])
b=np.array([1,2])
c=np.array([a,b])
result=magic(c)
其中 magic()
是我想要的功能,结果应该是 np.array([10,3])
即 numpy.array
包含每个输入数组的总和。
最佳答案
以下是建议(答案和评论)及其时间安排的汇编:
import numpy as np
c = np.array([np.random.rand(np.random.randint(1, 300)) for i in range(50)])
def oliver(arr):
res = np.empty_like(arr)
for enu, subarr in enumerate(arr):
res[enu] = np.sum(subarr)
return res
def reut(arr):
return np.array([a.sum() for a in arr])
def hpaulj(arr):
d = np.concatenate(arr)
l = map(len, arr)
i = np.cumsum(l) - l
return np.add.reduceat(d, i)
以及他们的时代:
In [94]: timeit oliver(c)
1000 loops, best of 3: 457 µs per loop
In [95]: timeit reut(c)
1000 loops, best of 3: 317 µs per loop
In [96]: timeit hpaulj(c)
10000 loops, best of 3: 94.4 µs per loop
实现@hpaulj有点棘手,但我想我明白了(如果你使用concatenate
而不是hstack
,它是最快的)
关于arrays - 数组中数组的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662129/