2014-05-15 10 views
5

Ich habe ein Wörterbuch alsWörterbuch Schlüssel und Werte trennen numpy Arrays

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} 

Ich möchte die keys und values in 2 numpy Arrays trennen. Ich versuchte np.array(Samples.keys(),dtype=np.float), aber ich erhalte eine Fehlermeldung TypeError: float() argument must be a string or a number

Antwort

9

Sie np.fromiter direkt verwenden können, um numpy Arrays aus dem Wörterbuch-Schlüssel und Werte Ansichten zu erstellen:

In Python 3:

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

In 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

Nein, es wird nicht funktionieren (zumindest in Python 3.4): >> np.array (Samples.keys()) Out [15]: Array (dict_keys ([5,207403005022627, 6,897022216779476, 7,833851740714097, 8,530114325550533, 10.418899728838058, 5.39839468202205]), dtype = objekt) Was ist nicht was du willst! – ankostis

0

nur alle Werte in eine Liste zuweisen, und dann zu einem np.array() konvertieren.

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()) 

Oder, wenn 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

Können Sie über dieses Array iterieren? – VeilEclipse

+0

Möchten Sie darüber iterieren? Wenn ja, dann ja. –

+0

Wenn Sie keys = np.array (Samples.keys()), können Sie iterieren? – VeilEclipse

9

auf Python 3.4 arbeitet die folgenden einfach:

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())) 

Der Grund np.array(Samples.values()) nicht geben, was Sie in Python erwarten 3, dass in Python 3, die Werte() -Methode eines dict zurückkehrt eine iterierbare Ansicht, während in Python 2 eine aktuelle Liste der Schlüssel zurückgegeben wird.

keys = np.array(list(Samples.keys())) wird tatsächlich in Python 2.7 auch funktionieren, und wird Ihren Code mehr Version agnostic. Aber der zusätzliche Anruf zu list() wird es marginal verlangsamen.

Verwandte Themen