Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hdf5 将可变长度序列写入复合数组_Hdf5_H5py - Fatal编程技术网

Hdf5 将可变长度序列写入复合数组

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

我将复合数据类型与h5py一起使用,其中一些元素是可变长度数组。我找不到设置项目的方法。下面的MWE展示了6种不同的方法(顺序索引-无论如何在h5py中都不起作用)、融合索引、列/行的读取-修改-提交),这两种方法都不起作用

正确的方法是什么?为什么在将整数列表写入
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中跟踪:。