总结阵列中不同形状的所有numpy子阵列的所有值

时间:2014-11-06 21:25:10

标签: python arrays python-3.x numpy

我有一个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))]

2 个答案:

答案 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数组。