2014-05-15 10 views
5

Ho un dizionario comechiavi e valori Dictionary per separare gli array 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} 

voglio separare la keys e values in 2 numpy array. Ho provato np.array(Samples.keys(),dtype=np.float) ma ottengo un errore TypeError: float() argument must be a string or a number

risposta

9

È possibile utilizzare np.fromiter per creare direttamente numpy array dalla chiave del dizionario e valori guardati:

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

No, non funziona (almeno 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 = oggetto) Quale non è quello che vuoi! – ankostis

0

Basta assegnare tutti i valori a un elenco, e poi convertire in un 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()) 

O, se 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

Si può iterare su questo array? – VeilEclipse

+0

Vuoi iterare su di esso? Se è così, allora si. –

+0

Quando si usa keys = np.array (Samples.keys()), si può iterare? – VeilEclipse

9

su Python 3.4, le seguenti opere semplicemente:

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

Il motivo np.array(Samples.values()) non dà quello che ci si aspetta in Python 3 è che in Python 3, i valori() di un dict rendimenti una vista iterabile, mentre in Python 2 restituisce un elenco effettivo delle chiavi.

keys = np.array(list(Samples.keys())) funzionerà anche in Python 2.7 e renderà il codice più indipendente dalla versione. Ma la chiamata extra a list() lo rallenterà marginalmente.

Problemi correlati