web-dev-qa-db-de.com

Wörterbuchschlüssel und -werte zum Trennen von Zahlenfeldern

Ich habe ein Wörterbuch als

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 aufteilen. Ich habe np.array(Samples.keys(),dtype=np.float) ausprobiert, aber ich erhalte einen Fehler TypeError: float() argument must be a string or a number

9
VeilEclipse

Sie können np.fromiter verwenden, um numpy Arrays direkt aus den Dictionary-Schlüssel- und Werteansichten 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)
19
ankostis

Unter Python 3.4 funktioniert Folgendes 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, warum np.array(Samples.values()) nicht genau angibt, was Sie in Python 3 erwarten, ist, dass in Python 3 die Methode values ​​() eines Diktats eine iterative Ansicht zurückgibt, während sie in Python 2 eine tatsächliche Liste der Schlüssel zurückgibt.

keys = np.array(list(Samples.keys())) funktioniert auch in Python 2.7 und macht Ihren Code versionsunabhängiger. Durch den zusätzlichen Aufruf von list() wird dies jedoch geringfügig verlangsamt.

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

Weisen Sie einfach alle Werte einer Liste zu und konvertieren Sie sie dann in eine 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())

Oder, wenn Sie darüber iterieren möchten :

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