【问题标题】:NumPy argmax and structured array error: expected a readable buffer objectNumPy argmax 和结构化数组错误:期望一个可读的缓冲区对象
【发布时间】:2014-12-23 16:43:29
【问题描述】:

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

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

【问题讨论】:

    标签: numpy structured-array argmax


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2012-09-17
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多