54 votes

TypeError : type non illisible : 'numpy.ndarray'

À partir d'un fichier texte contenant trois colonnes de données, je veux pouvoir simplement prendre un slice de données des trois colonnes où les valeurs de la première colonne sont égales aux valeurs définies dans above . Je veux ensuite mettre la tranche de données dans un nouveau tableau appelé slice (j'utilise 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)

Ce qui précède revient avec :

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

44voto

DSM Points 71975

Votre variable energies probablement la mauvaise forme :

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

Et c'est ce qui se passe si vous lisez des données en colonnes en utilisant votre approche :

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

Vous pouvez probablement simplement utiliser

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

au lieu.

(PS Votre code semble indécis quant à savoir s'il s'agit de data ou elementdata . J'ai supposé que c'était simplement une faute de frappe.)

5voto

Joni Points 69

numpy.ndarray peut contenir n'importe quel type d'élément, par exemple int , float , string etc. Vérifiez le type et effectuez une conversion si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X