2014-05-15 18 views
5

Tôi có một cuốn từ điển nhưphím từ điển và các giá trị để tách mảng NumPy

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771} 

Tôi muốn tách keysvalues thành 2 numpy mảng. tôi đã cố gắng np.array(Samples.keys(),dtype=np.float) nhưng tôi nhận được một lỗi TypeError: float() argument must be a string or a number

Trả lời

9

Bạn có thể sử dụng np.fromiter để trực tiếp tạo ra numpy mảng từ chìa khóa từ điển và các giá trị quan điểm:

Trong python 3:

keys = np.fromiter(Samples.keys(), dtype=float) 
vals = np.fromiter(Samples.values(), dtype=float) 

Trong python 2:

keys = np.fromiter(Samples.iterkeys(), dtype=float) 
vals = np.fromiter(Samples.itervalues(), dtype=float) 
0
keys = np.array(dictionary.keys()) 
values = np.array(dictionary.values()) 
+3

Không nó sẽ không hoạt động (ít nhất là trong python 3.4): >> np.array (Samples.keys()) Out [15]: mảng (dict_keys ([5,207403005022627, 6,897022216779476, 7,833851740714097, 8,530114325550533, 10.418899728838058, 5.39839468202205]), dtype = object) Đó không phải là điều bạn muốn! – ankostis

0

Chỉ cần gán tất cả các giá trị vào một danh sách, và sau đó chuyển sang một np.array().

import numpy as np 

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771} 

keys = np.array(Samples.keys()) 
vals = np.array(Samples.values()) 

Hoặc, nếu you want to iterate over it:

import numpy as np 

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771} 

keys = vals = [] 

for k, v in Samples.items(): 
    keys.append(k) 
    vals.append(v) 

keys = np.array(keys) 
vals = np.array(vals) 
+0

Bạn có thể lặp lại qua mảng này không? – VeilEclipse

+0

Bạn có muốn lặp lại không? Nếu có, thì có. –

+0

Khi u làm các phím = np.array (Samples.keys()), bạn có thể lặp lại không? – VeilEclipse

9

On python 3.4, sau đây chỉ đơn giản là hoạt động:

Samples = {5.207403005022627: 0.69973543384229719, 6.8970222167794759: 0.080782939731898179, 7.8338517407140973: 0.10308033284258854, 8.5301143255505334: 0.018640838362318335, 10.418899728838058: 0.14427355015329846, 5.3983946820220501: 0.51319796560976771} 

keys = np.array(list(Samples.keys())) 
values = np.array(list(Samples.values())) 

Lý do np.array(Samples.values()) không cung cấp những gì bạn mong đợi trong Python 3 được rằng trong Python 3, các giá trị() phương pháp của một lợi nhuận dict một lần xem có thể lặp lại, trong khi trong Python 2, nó trả về một danh sách thực sự của các khóa.

keys = np.array(list(Samples.keys())) cũng sẽ thực sự hoạt động trong Python 2.7 và sẽ làm cho mã của bạn trở nên bất khả tri hơn. Tuy nhiên, cuộc gọi thêm vào list() sẽ làm chậm nó xuống một cách nhẹ nhàng.

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