2012-01-26 41 views
21

Từ một tệp văn bản chứa ba cột dữ liệu tôi muốn có thể lấy một dữ liệu từ tất cả ba cột, trong đó các giá trị trong cột đầu tiên bằng giá trị được xác định trong above. sau đó tôi muốn đặt lát dữ liệu vào một mảng mới gọi là slice (Tôi đang sử dụng Python 2,7)LoạiError: loại không thể loại bỏ: '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) 

Trên đây trở lại với:

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

Trả lời

16

bạn biến energies lẽ có hình dạng sai:

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

Và đó là điều sẽ xảy ra nếu bạn đọc dữ liệu cột sử dụng cách tiếp cận:

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

Có lẽ bạn chỉ có thể sử dụng

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

để thay thế.

(T.B. Mã của bạn trông giống như nó chưa quyết định về việc liệu nó data hoặc elementdata. Tôi đã cho rằng nó chỉ đơn giản là một lỗi đánh máy.)

+0

Cảm ơn bạn rất nhiều vì câu trả lời này. Nó làm việc hoàn hảo và dọn dẹp mọi thứ cho tôi. Dữ liệu/elementdata thực sự là một lỗi đánh máy. – user1171835

Các vấn đề liên quan