0

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

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()

似乎是结构化数组造成的错误。但是你能帮忙解释一下原因吗?

4

1 回答 1

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
于 2014-12-23T17:18:50.183 回答