【问题标题】:TypeError: unhashable type: 'numpy.ndarray'TypeError:不可散列的类型:'numpy.ndarray'
【发布时间】:2012-02-19 19:32:33
【问题描述】:

从包含三列数据的文本文件中,我希望能够从所有三列中获取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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的变量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。我认为这只是一个错字。)

      【讨论】:

      • 非常感谢您的回答。它工作得很好,为我清理了一切。 data/elementdata 确实是一个错字。
      • 这里的形状差异在可散列的一维和不可散列的二维numpy数组之间。
      猜你喜欢
      • 1970-01-01
      • 2018-07-29
      • 2020-05-22
      • 1970-01-01
      • 2019-03-22
      • 2022-01-08
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多