Seite 1 von 1
Numpy Arrays Speichern und Laden
Verfasst: Mittwoch 25. September 2019, 21:42
von Zizibee
Hallo zusammen,
ich habe numpy arrays (type numpy.ndarray) der Form array([[x],[y],[z]]), mit float Werten. Nach etwas rumprobieren klappt das Speicher und Laden nun so:
Code: Alles auswählen
def save_numpy(data1, data2):
numpy.savez('test_numpy', data1, data2)
def load_numpy():
data = numpy.load('test_numpy.npz')
return [data['arr_0'], data['arr_1']]
Nun hätte ich das ganze aber gerne etwas flexibler, damit ich beliebig viele arrays übergeben kann. Nur bekomme ich das nicht über Listen hin. Beim Speichern schaffe ich es nicht die Liste zu übergeben, ohne sie händisch zu zerlegen und beim Laden steht in der Liste wieder nur ['arr_0', 'arr_1'] drin.
Code: Alles auswählen
def save_numpy_list(data):
numpy.savez('test_liste', data[0], data[1])
def load_numpy_list():
liste = []
datas = numpy.load('test_liste.npz')
for data in datas:
liste.append(data)
return liste
Kann mir jemand sagen, wie ich das am Besten hinbekommen kann?
Schon einmal vielen Dank!
Re: Numpy Arrays Speichern und Laden
Verfasst: Mittwoch 25. September 2019, 22:50
von bords0
Vermutlich musst du savez die Liste entpackt übergeben. Beim Einlesen bekommst du ein dict-artiges (NpzFile) Objekt, von dem du nur die Werte willst (deine Lösung lieferte nur die Schlüssel).
Ungetestet (ich kenne NpzFile nicht gut genug):
Code: Alles auswählen
def save_numpy_list(data):
numpy.savez('test_liste', *data)
def load_numpy_list():
return list(numpy.load('test_liste.npz').values())
Re: Numpy Arrays Speichern und Laden
Verfasst: Donnerstag 26. September 2019, 10:05
von Zizibee
Danke schön, dann werde ich das mal testen und mich doch mal mit dem '*' beschäftigen, um zu verstehen was der genau macht.
Re: Numpy Arrays Speichern und Laden
Verfasst: Donnerstag 26. September 2019, 10:51
von __blackjack__
@bords0: Wobei ich vorsichtig wäre eine Annahme über die Reihenfolge von den `values()` zu treffen, sofern das nicht irgendwo in der Dokumentation garantiert wird.
Edit: Das Objekt was man da bekommt muss man auch wieder schliessen.
Re: Numpy Arrays Speichern und Laden
Verfasst: Freitag 27. September 2019, 07:11
von Zizibee
Die Übergabe mithilfe von *data funktioniert auf jeden Fall
Bei meinem Minnibeispiel hat das mit values() auch geklappt. Was ich gelesen habe, scheint values() aber eher dafür zu sein die Values eines Dictionarys nach den Keys sortiert auszugeben. Eine Aussage, wie die Reihenfolge ausserhalb von Dictionarys ist, habe ich bisher leider nicht gefunden.
Weiß das jemand genauer oder kennt eine Alternative?
Re: Numpy Arrays Speichern und Laden
Verfasst: Freitag 27. September 2019, 07:24
von sparrow
Gehst du davon aus, dass .values() eine eingebaute Funktion ist? Dem ist nicht so.
Ich kenne auch keine .values()-Funktion die dafür sorgt, dass Values eines Dicts nach Keys sortiert ausgegeben werden. Da musst du etwas falsch verstanden haben. Dicts habe neine Funktion
.values() aber die macht nicht, was du beschreibst.
Was die Funktion .values() in deinem Fall macht, hängt davon ab, was numpy.load() für ein Objekt zurück gibt. Und dann kannst du nachschauen, ob dieses Objekt eine Funktion .values() hat und was die tut. Entweder in der entsprechend Dokumentation oder mit dem Befehl "help" im interaktiven Interpreter.
Re: Numpy Arrays Speichern und Laden
Verfasst: Freitag 27. September 2019, 08:17
von Sirius3
Hast Du die Dokumentation zu savez oder load gelesen?
Da steht zum einen, dass load ein Wörterbuch-ähnliches Objekt zurückliefert (@sparrow: die Reihenfolge der Werte, die von values() zurückgegeben wird, ist die selbe, wie die dazugehörigen Schlüssel, die von keys() zurückgegeben werden).
Dieses Objekt muß auch wieder geschlossen werden. Wie man das am besten macht, steht auch in der Dokumentation als Beispiel.
Welche Schlüssel in die Datei geschrieben werden, ist in savez beschrieben, auch wie die heißen, wenn man keine explizit angibt. Hast Du aber explizite Namen für die Arrays, solltest Du diese auch beim Schreiben benutzen.
Kannst Du noch näher beschreiben, was das für Daten sind, die Du speichern willst?
Re: Numpy Arrays Speichern und Laden
Verfasst: Freitag 27. September 2019, 11:32
von Zizibee
Ich werde mir am Wochenende wohl echt mal die Zeit nehmen die Dokus ordentlich zu lesen, anstatt sie nur zu überfliegen.
@ Sirius3: Ich habe mal ein Einsteigerbuch über Neuronale Netze geschenkt bekommen und nun wollte ich die Gewichtungen der Pfade in eine Datei speichern.
Heute Abend kann ich nachschauen, wie die Arrays aufgebaut werden, so exakt habe ich das leider nicht im Kopf.
Re: Numpy Arrays Speichern und Laden
Verfasst: Samstag 28. September 2019, 17:31
von Zizibee
Sirius3 hat geschrieben: Freitag 27. September 2019, 08:17
Welche Schlüssel in die Datei geschrieben werden, ist in savez beschrieben, auch wie die heißen, wenn man keine explizit angibt. Hast Du aber explizite Namen für die Arrays, solltest Du diese auch beim Schreiben benutzen.
Damit habe ich rumgespielt und das hat auch so geklappt. Wenn ich das jetzt aber mit der Anzahl der Arrays flexibel handhaben will und sie daher mit *data übergebe, muss ich ja die Namen der Arrays als **kwrds übergeben. Da scheitert es mir gerade am Verständnis...
Ich hätte jetzt nämlich so etwas versucht
Code: Alles auswählen
def save_list(data, keywords):
numpy.savez('test_list', *data, **keywords)
save_list((data0, data1), [data0:'arr0', data1:'arr1'])
Was natrürlich zu einem Fehler führt
Sirius3 hat geschrieben: Freitag 27. September 2019, 08:17
Kannst Du noch näher beschreiben, was das für Daten sind, die Du speichern willst?
Wie gestern schon geschrieben, geht es um Gewichtungen von Pfaden zwischen den Schichten mit den (Nerven-)Knoten. Zur Zeit habe ich eine Eingangs-, eine Zwischen- und eine Ausgangsschicht. Da ich aber mit der Anzahl der Zwichenschichten etwas rumspielen wollte, wollte ich das Speichern und Laden möglichst flexibel handhaben, so dass ich es nicht immer händisch anpassen muss.
Das Array für die Gewichtungen wird (zur Zeit noch) in etwas initialisiert:
Code: Alles auswählen
weighting_input_interlayer = numpy.random.rand(count_interlayer, count_inputs) - 0.5
Re: Numpy Arrays Speichern und Laden
Verfasst: Samstag 28. September 2019, 18:40
von Zizibee
Code: Alles auswählen
save_list((data0, data1), [data0:'arr0', data1:'arr1'])
File "<ipython-input-34-a635441e8102>", line 1
save_list((data0, data1), [data0:'arr0', data1:'arr1'])
^
SyntaxError: invalid syntax
Re: Numpy Arrays Speichern und Laden
Verfasst: Samstag 28. September 2019, 19:31
von __blackjack__
@Zizibee: Echt jetzt…
Arbeite am besten mal ein Python-Grundlagentutorial durch.