简单的numpy.sum引发了ValueError:'轴'进入是出界的

时间:2015-08-08 18:23:10

标签: python numpy

我觉得我在这里错过了明显的东西,但当我尝试一个非常简单的numpy.sum用法时,

import numpy as np
np.sum(1,2)

我收到以下错误,

ValueError: 'axis' entry is out of bounds

所以我尝试了以下

import numpy as np
np.sum(1,2, axis = 0)

会出现以下错误

TypeError: sum() got multiple values for argument 'axis'

任何人都有任何智慧的话语?我觉得这应该是这么简单。谢谢!

2 个答案:

答案 0 :(得分:5)

help(np.sum)显示了该功能的呼叫签名:

In [72]: help(np.sum)
sum(a, axis=None, dtype=None, out=None, keepdims=False)
    Sum of array elements over a given axis.

当您致电np.sum(1, 2)时,np.sum会收到两个positional arguments,1和2。  a绑定到第一个位置参数1,axis绑定到第二个位置参数2。 这会引发ValueError: 'axis' entry is out of bounds,因为数组标量, np.array(1)没有2轴。

当您致电np.sum(1, 2, axis=0)时,a被绑定为1,axis被分配两次,首先是位置参数2,还有关键字参数axis=0 。 这会导致Python引发TypeError: sum() got multiple values for argument 'axis'

当函数接受任意数量的参数时,函数签名就是这样编写的:

func(x1 [, x2 [...]])

例如,请参阅zip的函数签名:

In [84]: help(zip)
zip(...)
    zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

或简单地使用省略号:

In [83]: help(min)
min(...)
    min(iterable[, key=func]) -> value
    min(a, b, c, ...[, key=func]) -> value

作为juanchopanza shows,要将1和2都传递给a,您可以使用

In [76]: np.sum([1,2])
Out[76]: 3

因为[1,2]一个对象 - 包含1和2的列表。

答案 1 :(得分:2)

numpy.sum在类似数组的对象上运行。所以以下方法可行:

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

如有疑问,请使用帮助:

>>> help(np.sum)