web-dev-qa-db-fra.com

Dictionnaire clés et valeurs pour séparer les tableaux numpy

J'ai un dictionnaire comme

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}

Je veux séparer les keys et values en 2 tableaux numpy. J'ai essayé np.array(Samples.keys(),dtype=np.float) mais j'obtiens une erreur TypeError: float() argument must be a string or a number

9
VeilEclipse

Vous pouvez utiliser np.fromiter pour créer directement des tableaux numpy à partir des vues de clé et de valeurs de dictionnaire: 

En python 3:

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

En python 2: 

keys = np.fromiter(Samples.iterkeys(), dtype=float)
vals = np.fromiter(Samples.itervalues(), dtype=float)
19
ankostis

Sur python 3.4, ce qui suit fonctionne simplement:

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

La raison pour laquelle np.array(Samples.values()) ne donne pas ce que vous attendez dans Python 3 est que, dans Python 3, la méthode values ​​() d'un dict renvoie une vue itérable, alors que dans Python 2, elle renvoie la liste réelle des clés.

keys = np.array(list(Samples.keys())) fonctionnera également dans Python 2.7 et rendra votre code plus agnostique. Mais l'appel supplémentaire à list() le ralentira légèrement. 

10
pratyaksh
keys = np.array(dictionary.keys())
values = np.array(dictionary.values())
0
1478963

Attribuez simplement toutes les valeurs à une liste, puis convertissez-les en 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())

Ou, si vous voulez itérer dessus :

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
A.J. Uppal