将可变长度序列写入复合数组 [英] Writing variable-length sequence to a compound array

查看:0
本文介绍了将可变长度序列写入复合数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

正确的方式是什么?为什么将整数列表写入int32列表时,h5py显示为Cannot change data-type for object array

with h5py.File('/tmp/test-vla.h5','w') as h5:
    dt=np.dtype([('a',h5py.vlen_dtype(np.dtype('int32')))])
    dset=h5.create_dataset('test',(5,),dtype=dt)
    dset['a'][2]=[1,2,3] # does not write the value back
    dset[2]['a']=[1,2,3] # does not write the value back
    dset['a',2]=[1,2,3]  # Cannot change data-type for object array
    dset[2,'a']=[1,2,3]  # Cannot change data-type for object array
    tmp=dset['a']; tmp[2]=[1,2,3]; dset['a']=tmp # Cannot change data-type for object array
    tmp=dset[2]; tmp['a']=[1,2,3]; dset[2]=tmp # 'list' object has no attribute 'dtype'

推荐答案

在处理复合数据集时,我发现最好在一条语句中添加所有行数据。我调整了您的代码,并展示了如何添加3行数据(每行数据的长度不同)。请注意我是如何: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下面的这篇帖子:
Compound datatype with int, float and array of floats

这篇关于将可变长度序列写入复合数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆