我有一个numpy.array不同形状的numpy数组。 当我调用np.sum(my_array)时,我收到此错误:
Traceback (most recent call last):
return umr_sum(a, axis, dtype, out, keepdims)
ValueError: operands could not be broadcast together with shapes (13,5) (5,3)
我想要的是所有数组中所有值的总和,例如sum(my_array)=一些浮点数
我错过了一些参数或其他方法吗? 我只能想到这样的事情
np.sum([np.sum(a) for a in my_array])
这是最佳方式吗?
更新
print(type(my_array))
print((my_array).shape)
print([(type(sub_array), sub_array.shape) for sub_array in my_array])
输出:
<class 'numpy.ndarray'>
(2,)
[(<class 'numpy.ndarray'>, (13, 5)), (<class 'numpy.ndarray'>, (5, 3))]
答案 0 :(得分:4)
在大多数情况下,使用生成器应该更好:
np.sum(np.sum(a) for a in my_array)
如果没有'[...]',则不会创建列表。
%timeit np.sum( np.sum(a) for a in my_array )
100000个循环,最佳3:每循环5.73μs
%timeit np.sum( [np.sum(a) for a in my_array] )
100000个循环,最佳3:每循环9.97μs
答案 1 :(得分:0)
a = np.array(map(np.arange, range(16, 32)))
Eyy![28]: %timeit np.sum(map(np.sum, a))
10000 loops, best of 3: 90.5 µs per loop
Eyy![29]: %timeit np.sum(np.sum(b) for b in a)
10000 loops, best of 3: 86 µs per loop
Eyy![30]: %timeit np.sum([np.sum(b) for b in a])
10000 loops, best of 3: 90.2 µs per loop
还要注意,如果你事先知道最大尺寸,很多时候可以更容易地使用zeropadded numpy数组。