python hdf5_Python HDF5属性

我正在尝试将测量属性保存在HDF5文件中。我花了很多时间来处理用格式化制作的文件,其中在单个属性条目中似乎有一组具有不同数据类型的属性。

例如,对于我的文件,命令

f = h5py.File('test.data','r+')

f['Measurement/Surface'].attrs['X Converter']

产生

array([(b'LateralCat', b'Pixels', array([0. , 2.00097752, 0. , 0. ]))],

dtype=[('Category', 'O'), ('BaseUnit', 'O'), ('Parameters', 'O')])

在这里,前两个条目是字符串,第三个条目是数组。现在,如果我尝试将值保存到其他文件中:

f1 = h5py.File('test_output.data','r+')

f1['Measurement/Surface'].attrs.create('X Converter',[(b'LateralCat', b'Pixels', np.array([0. , 2.00097752, 0. , 0. ]))])

我收到此错误:

追溯(最近一次通话):文件“ ”,位于f1 ['Measurement / Surface']。attrs.create('X Converter',[(b'LateralCat',b'Pixels' ,np.array([0。,2.00097752,0.,0.]))])文件“ C:\ WinPython \ WinPython-64bit-3.6.3.0Zero \ python-3.6.3.amd64 \ lib \ site-packages \ h5py_hl \ attrs.py“,第171行,位于create htype = h5t.py_create(original_dtype,logical = True)文件” h5py \ h5t.pyx“,第1611行,位于h5py.h5t.py_create文件” h5py \ h5t.pyx “,在h5py.h5t.py_create文件中的第1633行,在“ h5py.h5t.py_create”文件中的第1688行,TypeError:对象dtype dtype('O')没有等效的本机HDF5

我想念什么?

解决方案

您没有保存相同的东西。在dtype原来的是显著。

In [101]: [(b'LateralCat', b'Pixels', np.array([0. , 2.00097752, 0. ,

...: 0. ]))]

Out[101]:

[(b'LateralCat',

b'Pixels',

array([0. , 2.00097752, 0. , 0. ]))]

In [102]: np.array(_)

:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray

np.array(_)

Out[102]:

array([[b'LateralCat', b'Pixels',

array([0. , 2.00097752, 0. , 0. ])]],

dtype=object)

In [104]: np.array([(b'LateralCat', b'Pixels', np.array([0. , 2.00097752, 0.

...: , 0. ]))],

...: dtype=[('Category', 'O'), ('BaseUnit', 'O'), ('Parameters', 'O')])

Out[104]:

array([(b'LateralCat', b'Pixels', array([0. , 2.00097752, 0. , 0. ]))],

dtype=[('Category', 'O'), ('BaseUnit', 'O'), ('Parameters', 'O')])

In [105]: x = _

In [106]: x.dtype

Out[106]: dtype([('Category', 'O'), ('BaseUnit', 'O'), ('Parameters', 'O')])

In [108]: x['Category']

Out[108]: array([b'LateralCat'], dtype=object)

In [109]: x['BaseUnit']

Out[109]: array([b'Pixels'], dtype=object)

In [110]: x['Parameters']

Out[110]:

array([array([0. , 2.00097752, 0. , 0. ])],

dtype=object)

尽管这还不能完全解决问题,但由于dtype仍然包含对象dtype字段。

In [111]: import h5py

In [112]: f=h5py.File('test.h5','w')

In [113]:

In [113]: g = f.create_group('test')

In [114]: g.attrs.create('converter',x)

Traceback (most recent call last):

...

TypeError: Object dtype dtype('O') has no native HDF5 equivalent

如评论中所述,numpy写入时对象dtype有问题h5py。您知道原始文件是如何创建的吗?那里可能存在某些格式或结构,这些格式或结构h5py呈现为带有对象字段的复合dtype,但不能直接写入。我必须深入研究文档(也许是原始文件)以了解更多信息。

我可以将该数据写为更常规的结构化数组:

In [120]: y=np.array([(b'LateralCat', b'Pixels', np.array([0. , 2.00097752,

...: 0. , 0. ]))],

...: dtype=[('Category', 'S20'), ('BaseUnit', 'S20'), ('Parameters', 'fl

...: oat',4)])

In [121]: y

Out[121]:

array([(b'LateralCat', b'Pixels', [0. , 2.00097752, 0. , 0. ])],

dtype=[('Category', 'S20'), ('BaseUnit', 'S20'), ('Parameters', '

In [122]: g.attrs.create('converter',y)

In [125]: g.attrs['converter']

Out[125]:

array([(b'LateralCat', b'Pixels', [0. , 2.00097752, 0. , 0. ])],

dtype=[('Category', 'S20'), ('BaseUnit', 'S20'), ('Parameters', '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值