Hdf5 将可变长度序列写入复合数组
我将复合数据类型与h5py一起使用,其中一些元素是可变长度数组。我找不到设置项目的方法。下面的MWE展示了6种不同的方法(顺序索引-无论如何在h5py中都不起作用)、融合索引、列/行的读取-修改-提交),这两种方法都不起作用 正确的方法是什么?为什么在将整数列表写入Hdf5 将可变长度序列写入复合数组,hdf5,h5py,Hdf5,H5py,我将复合数据类型与h5py一起使用,其中一些元素是可变长度数组。我找不到设置项目的方法。下面的MWE展示了6种不同的方法(顺序索引-无论如何在h5py中都不起作用)、融合索引、列/行的读取-修改-提交),这两种方法都不起作用 正确的方法是什么?为什么在将整数列表写入int32list时,h5py会说无法更改对象数组的数据类型 将h5py.File('/tmp/test vla.h5',w')作为h5的: dt=np.dtype([('a',h5py.vlen_dtype(np.dtype('in
int32
list时,h5py会说无法更改对象数组的数据类型
将h5py.File('/tmp/test vla.h5',w')作为h5的:
dt=np.dtype([('a',h5py.vlen_dtype(np.dtype('int32')))]))
dset=h5.创建_数据集('test',(5,),dtype=dt)
数据集['a'][2]=[1,2,3]#不回写该值
数据集[2]['a']=[1,2,3]#不回写该值
数据集['a',2]=[1,2,3]#无法更改对象数组的数据类型
数据集[2,'a']=[1,2,3]#无法更改对象数组的数据类型
tmp=dset['a'];tmp[2]=[1,2,3];dset['a']=tmp#无法更改对象数组的数据类型
tmp=dset[2];tmp['a']=[1,2,3];dset[2]=tmp#“list”对象没有属性“dtype”
在处理复合数据集时,我发现最好在一条语句中添加所有行数据。我调整了您的代码并演示了如何添加3行数据(每行长度不同)。注意I:1)用元组定义数据行;2) 使用np.array()
定义整数列表;3)不要引用字段名['a']
with h5py.File('test-vla.h5','w') as h5:
dt=np.dtype([('a',h5py.vlen_dtype(np.dtype('int32')))])
dset=h5.create_dataset('test',(5,),dtype=dt)
print (dset.dtype, dset.shape)
dset[0] = ( np.array([0,1,2]), )
dset[1] = ( np.array([1,2,3,4]), )
dset[2] = ( np.array([0,1,2,3,4]), )
有关更多信息,请查看HDF集团论坛上的这篇文章,其标题为“HDF5辅助工具”/h5py:
@eudoxos,你还没有对这个答案发表评论。你还在这工作吗?还是我回答了你的问题?对不起,迟到了。这是一个很有帮助的回答(尽管我不高兴不得不围绕这个问题工作,而不是变得聪明)。我所做的是基于您的想法:读取整行:rowdata=dataset[row]
,使用数据类型名称查找基于键的索引:rowdata[dataset.dtype.names.index('a')]=[1,2,3,4,5,6]
,回写:dataset[row]=rowdata
。我发现这个问题正在h5py中跟踪:。