Je voudrais organiser mes données collectées (à partir de simulations informatiques) dans un fichier hdf5 en utilisant Python. J'ai mesuré les positions et les vitesses [x, y, z, vx, vy, vz] de tous les atomes dans une certaine région de l'espace sur plusieurs pas de temps. Le nombre d'atomes, bien sûr, varie d'un pas de temps à l'autre.H5PY - Comment stocker de nombreux tableaux 2D de différentes dimensions
Un exemple minimal pourrait se présenter comme suit:
[
[ [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 pas de temps, première fois étape: 2 atomes, seconde étape de temps: 3 atomes)
Mon idée était de créer un Jeu de données hdf5 dans Python qui stocke toutes les informations. A chaque pas de temps, il devrait enregistrer un tableau 2d de positions/ELCA vitesses de tous les atomes, à savoir
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] ].
L'idée est claire, je pense. Cependant, je lutte avec la définition du type de données correct de l'ensemble de données avec la longueur variable de tableau.
Mon code ressemble à ceci:
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]
Ceci, cependant, ne fonctionne pas. Quand j'exécute le script, j'obtiens le message d'erreur "AttributeError: l'objet 'float' n'a pas d'attribut 'dtype'." Il semble que mon type défini dtype est faux.
Est-ce que quelqu'un voit comment il devrait être défini correctement?
Merci beaucoup, Sven