Dies wird standardmäßig nicht unterstützt, aber Sie können es recht einfach zum Laufen bringen! Es gibt mehrere Dinge, die Sie encodieren möchten, wenn Sie die genau gleichen Daten zurückhaben möchten:
- Die Daten selbst, die Sie mit
obj.tolist()
abrufen können, wie von @travelingbones erwähnt. Manchmal ist dies vielleicht gut genug.
- Der Datentyp. Ich denke, das ist in einigen Fällen wichtig.
- Die Dimension (nicht unbedingt 2D), die aus dem Vorherigen abgeleitet werden könnte, wenn Sie annehmen, dass die Eingabe tatsächlich immer ein 'rechteckiges' Gitter ist.
- Die Speicherreihenfolge (zeilen- oder spaltenweise). Dies spielt zwar nicht oft eine Rolle, aber manchmal schon (z.B. Leistung), also warum nicht alles speichern?
Außerdem könnte Ihr Numpy-Array Teil Ihrer Datenstruktur sein, z.B. haben Sie eine Liste mit einigen Matrizen darin. Dafür könnten Sie einen benutzerdefinierten Encoder verwenden, der im Wesentlichen das oben Genannte tut.
Dies sollte ausreichen, um eine Lösung zu implementieren. Oder Sie könnten json-tricks verwenden, das genau dies tut (und verschiedene andere Typen unterstützt) (Haftungsausschluss: Ich habe es gemacht).
pip install json-tricks
Dann
data = [
arange(0, 10, 1, dtype=int).reshape((2, 5)),
datetime(year=2017, month=1, day=19, hour=23, minute=00, second=00),
1 + 2j,
Decimal(42),
Fraction(1, 3),
MyTestCls(s='ub', dct={'7': 7}), # später ansehen
set(range(7)),
]
# Mit Metadaten encodieren, um die Typen beim Decodieren beizubehalten
print(dumps(data))