Я хотел бы организовать свои собранные данные (из компьютерных симуляций) в файл hdf5 с помощью Python. Я измерял положения и скорости [x, y, z, vx, vy, vz] всех атомов в определенной пространственной области на протяжении многих временных шагов. Количество атомов, конечно, меняется от временного шага к временному шагу.H5PY - Как хранить много 2D-массивов разных размеров
минимальный пример может выглядеть следующим образом:
[
[ [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 временные шаги, первый шаг по времени: 2 атома, второй шаг по времени: 3 атома)
Моя идея состояла в том, чтобы создать hdf5 в Python, который хранит всю информацию. На каждом временном шаге он должен хранить 2d массив Alls позиций/скоростей всех атомов, т.е.
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] ].
Идея понятна, я думаю. Однако я борюсь с определением правильного типа данных набора данных с переменной длиной массива.
Мой код выглядит следующим образом:
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]
Это, однако, не работает. Когда я запускаю скрипт, я получаю сообщение об ошибке «Объект AttributeError:« float »не имеет атрибута« dtype ».» Кажется, что мой определенный dtype ошибочен.
Кто-нибудь видит, как он должен быть определен правильно?
Большое спасибо, Sven