【发布时间】:2017-05-18 20:12:36
【问题描述】:
我想使用 Python 将我收集的数据(来自计算机模拟)组织到一个 hdf5 文件中。 我在多个时间步长上测量了某个空间区域内所有原子的位置和速度 [x,y,z,vx,vy,vz]。当然,原子的数量因时间步长而异。
一个最小的例子如下所示:
[
[ [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 个原子)
我的想法是在 Python 中创建一个 hdf5 数据集来存储所有信息。在每个时间步,它应该存储所有原子的所有位置/速度的二维数组,即
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 是错误的。
有人知道它应该如何正确定义吗?
非常感谢, 斯文
【问题讨论】: