np.sum的意外行为,充当np.ravel

时间:2014-03-19 22:54:10

标签: python numpy sum

我有一个数字列表列表,我想总结所有数字(无论列表列表)。这应该是np.sum的小菜一碟 事实上,如果我们有

a=[[1,2],[3,4]]
np.sum(a)

返回10

顺便说一句,如果我们有

a=[[1,2],[3,4,5]]
np.sum(a)

返回

[1,2,3,4,5]

对我来说似乎很奇怪......

1 个答案:

答案 0 :(得分:4)

所以我觉得这里的答案很简单。

np.sum将评估这两个列表,并意识到它无法将其值存储在普通数组中。因此它将创建一个对象数组:

In [99]: x = [[1,2],[3,4,5]]

In [100]: np.array(x)
Out[100]: array([[1, 2], [3, 4, 5]], dtype=object)

在对数组元素求和时,它将使用对象__add__运算符。

添加两个对象是:

In [103]: [1,2] + [3,4,5]
Out[103]: [1, 2, 3, 4, 5]

因此:

In [104]: np.sum([[1,2],[3,4,5]])
Out[104]: [1, 2, 3, 4, 5]