使用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()
结构化数组似乎有错误。但你能帮助解释一下原因吗?
答案 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