2012-01-26 12 views
21

De un archivo de texto que contiene tres columnas de datos, quiero poder tomar un slice de datos de las tres columnas donde los valores en la primera columna son iguales a los valores definido en above. entonces quiero poner el trozo de datos en una nueva matriz llamada slice (estoy usando Python 2,7)TypeError: tipo unhashable: 'numpy.ndarray'

above = range(18000, 18060, 5) 

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

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

slice = set(energies)&set(above) 

Lo anterior se vuelva con:

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

Respuesta

16

La variable energies probablemente tiene la forma equivocada:

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

Y eso es lo que sucede si lee datos en columnas utilizando el enfoque:

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

Probablemente puede simplemente usar

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

lugar.

(P. S. Su código parece que está indeciso acerca de si es o dataelementdata. He asumido que es simplemente un error tipográfico.)

+0

muchas gracias por esta respuesta. Funcionó perfectamente y me solucionó las cosas. La data/elementdata fue de hecho un error tipográfico. – user1171835

Cuestiones relacionadas