使用numpy.take时出现TypeError

时间:2016-03-13 18:43:02

标签: python numpy

我正在尝试使用numpy.take()来获取(如文档所述)沿轴的数组元素。

我的代码:

print np.take(testArray,axis=1)

给出以下反直觉错误:

TypeError: take() takes at least 2 arguments (2 given)

好吧,如果给出两个,那么错在哪里?

为了调试,我打印了形状:

print testArray[:, 1].shape
print testArray[:, 1]       

(1L, 4L)
[[      251       100         4 886271884]]

2 个答案:

答案 0 :(得分:2)

这是一个可怕的错误消息,幸运的是它已在Python 3.3及更高版本中得到修复。

它实际意味着该函数至少需要两个 postional 参数,但是您已经给出了一个位置参数和一个关键字参数。您还需要提供一个索引数组作为第二个参数来指定要采用的元素;有关详细信息,请参阅documentation of numpy.take()

答案 1 :(得分:0)

正如斯文所提到的,你只提供了一个必需的参数。 axis参数只是可选的。您需要的第二个参数是要提取的元素索引的python列表:

print(np.take(testArray, list(range(testArray.shape[1])), axis=1))

如果您正在使用python< 3.0,其中range()仍然返回一个列表:

print np.take(testArray, range(testArray.shape[1]), axis=1)