Wenn Sie ein Diktat mit np.savez speichern, erhalten Sie ein unerwartetes Ergebnis?

9

Kann ich ein Wörterbuch mit np.savez speichern? Die Ergebnisse sind überraschend (zumindest für mich) und ich finde keinen Weg, meine Daten per Schlüssel zurück zu bekommen.

%Vor%

Ich verstehe nicht genau, was vor sich geht. Es scheint, dass meine Daten zu einem Wörterbuch innerhalb eines 0-dimensionalen Arrays werden, so dass ich keine Möglichkeit habe, meine Daten per Schlüssel zurückzubekommen. Oder vermisse ich etwas?

Meine Fragen sind also:

  1. Was passiert hier? Wenn ich noch mit Schlüssel auf meine Daten zugreifen kann, wie?
  2. Was ist der beste Weg, Daten dieses Typs zu speichern? (ein Diktat mit str als Schlüssel und andere dicts als Wert)

Danke!

    
louic 26.03.2014, 12:57
quelle

2 Antworten

9

Es ist möglich, die Daten wiederherzustellen:

%Vor%

Beachten Sie, dass der dtype "Objekt" ist.

%Vor%

Und es gibt nur ein Element im Array. Dieser Gegenstand ist ein Python-Diktat!

%Vor%

Sie können den Wert mit der item() -Methode abrufen (Hinweis: Dies ist nicht der items() Methode für Wörterbücher, noch etwas, das dem NpzFile innewohnt Klasse, aber ist die Methode numpy.ndarray.item() das kopiert den Wert im Array zu einem Standard Python skalars . In einem Array von object dtype ist ein beliebiger Wert in einer Zelle des Arrays (selbst ein Wörterbuch) ein Python-Skalar:

%Vor%

So stellen Sie a als Diktat wieder her:

%Vor%     
unutbu 26.03.2014, 13:08
quelle
1

Basierend auf dieser Antwort: recover dict von 0-d numpy array

Nach

%Vor%

können Sie

verwenden %Vor%

Es würde auch ohne die Verwendung eines Schlüsselwortarguments funktionieren, aber ich dachte, dass es sich lohnt, es zu teilen.

    
KeithWM 10.01.2017 10:40
quelle

Tags und Links