类型错误:不可哈希类型:'numpy.ndarray'

78
从一个包含三列数据的文本文件中,我想要只获取第一列的值与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个回答

55

你的变量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.])

(附注:你的代码似乎不确定它是data还是elementdata 。我假设这只是一个打字错误。)

改为:

(注:您的代码似乎无法确定是data还是elementdata。我假设这只是一个笔误。)


非常感谢您的回答。它完美地解决了我的问题并澄清了我的疑惑。数据/元素数据确实是一个笔误。 - user1171835
这里的形状差异在于可哈希的一维和不可哈希的二维numpy数组。 - James McGuigan

5

numpy.ndarray可以包含任何类型的元素,例如 intfloatstring 等等。如果有必要,请检查类型并进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接