NumPy argmax和结构化数组错误:期望一个可读的缓冲区对象

时间:2014-12-23 16:43:30

标签: numpy structured-array argmax

使用NumPy argmax方法时出现以下错误。有人可以帮我理解发生了什么:

import numpy as np
b = np.zeros(1, dtype={'names':['a','b'], 'formats': ['i4']*2})
b.argmax()

错误是

TypeError: expected a readable buffer object

以下运行没有问题:

a = np.zeros(3)
a.argmax()

结构化数组似乎有错误。但你能帮助解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

您的b是:

array([(0, 0)], dtype=[('a', '<i4'), ('b', '<i4')])

我收到argmax的其他错误消息:

TypeError: Cannot cast array data from dtype([('a', '<i4'), ('b', '<i4')]) to dtype('V8') according to the rule 'safe'

但这有效:

In [88]: b['a'].argmax()
Out[88]: 0

通常,您不能跨结构化数组的字段进行数学运算。您可以在每个字段内操作(如果是数字)。由于字段可能是数字,字符串和其他对象的混合,因此没有努力处理此类操作可能有意义的特殊情况。

如果您真的必须跨越字段进行操作,请尝试使用其他view,例如:

In [94]: b.view('<i4').argmax()
Out[94]: 0