TypeError: unhashable type: ‘numpy.ndarray’

Van een tekstbestand dat drie kolommen met gegevens bevat, wil ik in staat zijn om gewoon een slicegegevens te nemen van alle drie de kolommen waarbij de waarden in de eerste kolom gelijk zijn aan de waarden die zijn gedefinieerd in above. Vervolgens wil ik het gegevenssegment in een nieuwe array met de naam sliceplaatsen (ik gebruik 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)

Het bovenstaande komt terug met:

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

Antwoord 1, autoriteit 100%

Uw variabele energiesheeft waarschijnlijk de verkeerde vorm:

>>> 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'

En dat is wat er gebeurt als u kolomgegevens leest met uw aanpak:

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

Waarschijnlijk kunt u gewoon

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

in plaats daarvan.

(P.S. Je code ziet eruit alsof het niet duidelijk is of het dataof elementdatais. Ik ging ervan uit dat het gewoon een typfout was.)


Antwoord 2, autoriteit 11%

numpy.ndarraykan elk type element bevatten, b.v. int, float, stringetc. Controleer het type en voer zo nodig een conversie uit.

Other episodes