2014-12-23 7 views
0

У меня возникла следующая ошибка при использовании метода NumPy 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

Ваш 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 

 Смежные вопросы

  • Нет связанных вопросов^_^