ѕня*_*gнι 2 python arrays numpy sum
我有一个由几个普通的 numpy 数组组成的 numpy 对象数组
>> a = np.array([np.arange(5), np.arange(2), np.arange(7)])
>> a
array([array([0, 1, 2, 3, 4]), array([0, 1]), array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我想总结所有元素,理想情况下应该给我32. 如果我使用sum(a)我得到一个错误。但是,我可以使用得到结果
>> sum([np.sum(array) for array in a])
32
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有任何更快/更简单的方法来做到这一点?
print (np.concatenate(a).sum())
Run Code Online (Sandbox Code Playgroud)
print (np.sum(np.concatenate(a)))
32
Run Code Online (Sandbox Code Playgroud)
性能:取决于嵌套数组的数量和数组中的值的数量,因此最好在实际数据中进行测试:
a = np.array([np.arange(5), np.arange(2), np.arange(7)] * 1000)
#print (a)
In [40]: %timeit np.concatenate(a).sum()
830 µs ± 22.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [41]: %timeit (np.sum(np.concatenate(a)))
835 µs ± 33.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
#original solution
In [42]: %timeit sum([np.sum(array) for array in a])
15.3 ms ± 85.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
另一种解决方案:
In [43]: %timeit sum(np.sum(array) for array in a)
17.4 ms ± 2.27 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [44]: %timeit (sum(np.concatenate(a)))
2.28 ms ± 143 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)