TypeError: unhashable тип: 'numpy.ndarray' - PullRequest
37 голосов
/ 26 января 2012

Из текстового файла, содержащего три столбца данных, я хочу иметь возможность просто взять slice данных из всех трех столбцов, где значения в первом столбце равны значениям, определенным в above. Затем я хочу поместить фрагмент данных в новый массив с именем slice (я использую Python 2.7 )

above = range(18000, 18060, 5)

data = np.loadtxt(open('data.txt'), delimiter=None)

energies = (np.hsplit(data, 3))[0]

slice = set(energies)&set(above)

Вышесказанное возвращается с:

Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    set(energies)&set(above)
TypeError: unhashable type: 'numpy.ndarray

Ответы [ 2 ]

30 голосов
/ 26 января 2012

Ваша переменная energies, вероятно, имеет неправильную форму:

>>> from numpy import array
>>> set([1,2,3]) & set(range(2, 10))
set([2, 3])
>>> set(array([1,2,3])) & set(range(2,10))
set([2, 3])
>>> set(array([[1,2,3],])) & set(range(2,10))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'numpy.ndarray'

И вот что происходит, если вы читаете столбчатые данные, используя ваш подход:

>>> data
array([[  1.,   2.,   3.],
       [  3.,   4.,   5.],
       [  5.,   6.,   7.],
       [  8.,   9.,  10.]])
>>> hsplit(data,3)[0]
array([[ 1.],
       [ 3.],
       [ 5.],
       [ 8.]])

Вероятно, вы можете просто использовать

>>> data[:,0]
array([ 1.,  3.,  5.,  8.])

вместо.

(P.S. Ваш код выглядит так, будто не определился, является ли он data или elementdata. Я предположил, что это просто опечатка.)

3 голосов
/ 25 сентября 2018

numpy.ndarray может содержать элементы любого типа, например, int, float, string и т. Д. Проверьте тип и выполните преобразование, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...