Ich habe die folgenden Daten in Python 2 geschrieben, die ich in eine Python 3-Datei laden möchte.Problem mit numpy.load
import numpy as np
x = np.array([{'a': np.array([1., 2., 3])}])
np.save('data.npy', x)
Mein erster Versuch war:
import numpy as np
x = np.load('data.npy')
UnicodeError: Unpickling a python object failed
Nach Herumspielen mit den ursprünglichen Daten, die ich geladen bin versucht, so scheint es, dass, wenn ich einen numpy Schwimmer innerhalb eines numpy Array in einem Python Wörterbuch, ich bekomme den Fehler. Ich kann ein Dictionary laden, ich kann ein numpy Array laden, ich kann sogar ein numpy Array in ein Python-Dictionary laden, aber sobald ich numpy floats in einem numpy Array innerhalb eines Python-Dictionary habe, bekomme ich den Fehler. Mein zweiter Versuch war:
import numpy as np
x = np.load('data.npy', encoding = 'bytes')
x
array([{b'a': array([ 1., 2., 3.])}], dtype=object)
Das funktionierte, dass ich die Daten geladen werden konnte, aber es hat im Wörterbuch ein ‚b‘ vor jedem Schlüssel. Ich habe mich gefragt, ob irgendjemand einen Einblick hatte, warum dieses Problem auftritt und wie man es beheben kann.
Danke!
edit:
es scheint, wie die folgenden das Problem gelöst:
import numpy as np
x = np.load('data.npy', encoding = 'latin1')
Das b ist nicht wirklich Teil des Schlüssels. Es zeigt an, dass die Zeichenfolge eine Zeichenfolge aus Bytes ist. So ist b'a 'eine Zeichenfolge mit einem Byte, das den Buchstaben a darstellt. Dies ist vergleichbar mit Unicode-Strings, die zumindest in Python 2.x wie 'u'a' aussehen. – bigblind
Es gab einen Kommentar (ich glaube, es wurde gelöscht?), Was darauf hindeutet, dass Sie versuchen sollten, codierung = 'str' anstelle von encoding = 'bytes' zu verwenden. Encoding = 'str' ist ungültig, aber encoding = 'latin1' scheint zu funktionieren. – Zhaitan