Ich möchte meine gesammelten Daten (aus Computersimulationen) in eine hdf5-Datei mit Python organisieren. Ich habe Positionen und Geschwindigkeiten [x, y, z, vx, vy, vz] aller Atome innerhalb einer bestimmten Raumregion über viele Zeitschritte gemessen. Die Anzahl der Atome variiert natürlich von Zeitschritt zu Zeitschritt.H5PY - So speichern Sie viele 2D-Arrays unterschiedlicher Dimensionen
Ein minimales Beispiel könnte wie folgt aussehen:
[
[ [x1,y1,z1,vx1,vy1,vz1], [x2,y2,z2,vx2,vy2,vz2] ],
[ [x1,y1,z1,vx1,vy1,vz1], [x2,y2,z2,vx2,vy2,vz2], [x3,y3,z3,vx3,vy3,vz3] ]
]
(2 Zeitschritte, ersten Zeitschritt: 2 Atome, zweiter Zeitschritt: 3 Atome)
Meine Idee ein zu schaffen, war hdf5-Dataset in Python, das alle Informationen speichert. Bei jedem Zeitschritt sollte es speichert eine 2D-Anordnung von all Positionen/Geschwindigkeiten aller Atom, d.h.
dataset[0] = [ [x1,y1,z1,vx1,vy1,vz1], [x2,y2,z2,vx2,vy2,vz2] ]
dataset[1] = [ [x1,y1,z1,vx1,vy1,vz1], [x2,y2,z2,vx2,vy2,vz2], [x3,y3,z3,vx3,vy3,vz3] ].
Die Idee ist klar, glaube ich. Ich kämpfe jedoch mit der Definition des korrekten Datentyps des Datensatzes mit variierender Array-Länge.
Mein Code sieht wie folgt aus:
import numpy as np
import h5py
file = h5py.File ('file.h5','w')
columnNo = 6
rowtype = np.dtype("%sfloat32" % columnNo)
dt = h5py.special_dtype(vlen=np.dtype(rowtype))
dataset = file.create_dataset("dset", (2,), dtype=dt)
print dataset.value
testarray = np.array([[1.,2.,3.,2.,3.,4.],[1.,2.,3.,2.,3.,4.]])
print testarray
dataset[0] = testarray
print dataset[0]
Dies ist jedoch nicht funktioniert. Wenn ich das Skript ausführe, bekomme ich die Fehlermeldung "AttributeError: 'float' Objekt hat kein Attribut 'dtype'." Es scheint, dass mein definierter dtype falsch ist.
Kann jemand sehen, wie es richtig definiert werden sollte?
Vielen Dank, Sven