使用 h5py 创建 HDF5 复合属性
Creating HDF5 compound attributes using h5py
我正在尝试使用 h5py 创建一些简单的 HDF5 数据集,其中包含具有复合数据类型的属性。目标是具有两个整数的属性。这是我想创建的两个属性示例。
我的尝试以包含两个值的数组结束,例如
我如何使用 h5py 对此进行编码并获得包含两个整数的单个值?
当前代码看起来像
dt_type = np.dtype({"names": ["val1"],"formats": [('<i4', 2)]})
# also tried np.dtype({"names": ["val1", "val2"],"formats": [('<i4', 1), ('<i4', 1)]})
dataset.attrs.create('time.start', [('23', '3')], dtype=dt_type)
如何指定创建的类型或属性以获得第一个示例?
要使用 dt_type
创建数组,您必须正确嵌套列表和元组:
In [162]: arr = np.array([(['23','3'],)], dt_type)
In [163]: arr
Out[163]: array([([23, 3],)], dtype=[('val1', '<i4', (2,))])
这是具有复合数据类型的 (1,) 数组。 dtype 有 1 个字段,但该字段中有 2 个值。
使用替代数据类型:
In [165]: dt2 = np.dtype({"names": ["val1", "val2"],"formats": ['<i4', '<i4']})
In [166]: arr2 = np.array([('23','3',)], dt2)
In [167]: arr2
Out[167]: array([(23, 3)], dtype=[('val1', '<i4'), ('val2', '<i4')])
或者最简单的数组:
In [168]: arr3 = np.array([23,2])
In [169]: arr3
Out[169]: array([23, 2])
写入数据集:
In [170]: ds.attrs.create('arr', arr)
In [172]: ds.attrs.create('arr2', arr2)
In [173]: ds.attrs.create('arr3', arr3)
检查抓取:
In [175]: ds.attrs['arr']
Out[175]: array([([23, 3],)], dtype=[('val1', '<i4', (2,))])
In [176]: ds.attrs['arr2']
Out[176]: array([(23, 3)], dtype=[('val1', '<i4'), ('val2', '<i4')])
In [177]: ds.attrs['arr3']
Out[177]: array([23, 2])
转储:
1203:~/mypy$ h5dump compound.h5
HDF5 "compound.h5" {
GROUP "/" {
DATASET "test" {
DATATYPE H5T_STD_I64LE
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
DATA {
(0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
}
ATTRIBUTE "arr" {
DATATYPE H5T_COMPOUND {
H5T_ARRAY { [2] H5T_STD_I32LE } "val1";
}
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): {
[ 23, 3 ]
}
}
}
ATTRIBUTE "arr2" {
DATATYPE H5T_COMPOUND {
H5T_STD_I32LE "val1";
H5T_STD_I32LE "val2";
}
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): {
23,
3
}
}
}
ATTRIBUTE "arr3" {
DATATYPE H5T_STD_I64LE
DATASPACE SIMPLE { ( 2 ) / ( 2 ) }
DATA {
(0): 23, 2
}
}
}
}
}
我正在尝试使用 h5py 创建一些简单的 HDF5 数据集,其中包含具有复合数据类型的属性。目标是具有两个整数的属性。这是我想创建的两个属性示例。
我的尝试以包含两个值的数组结束,例如
我如何使用 h5py 对此进行编码并获得包含两个整数的单个值? 当前代码看起来像
dt_type = np.dtype({"names": ["val1"],"formats": [('<i4', 2)]})
# also tried np.dtype({"names": ["val1", "val2"],"formats": [('<i4', 1), ('<i4', 1)]})
dataset.attrs.create('time.start', [('23', '3')], dtype=dt_type)
如何指定创建的类型或属性以获得第一个示例?
要使用 dt_type
创建数组,您必须正确嵌套列表和元组:
In [162]: arr = np.array([(['23','3'],)], dt_type)
In [163]: arr
Out[163]: array([([23, 3],)], dtype=[('val1', '<i4', (2,))])
这是具有复合数据类型的 (1,) 数组。 dtype 有 1 个字段,但该字段中有 2 个值。
使用替代数据类型:
In [165]: dt2 = np.dtype({"names": ["val1", "val2"],"formats": ['<i4', '<i4']})
In [166]: arr2 = np.array([('23','3',)], dt2)
In [167]: arr2
Out[167]: array([(23, 3)], dtype=[('val1', '<i4'), ('val2', '<i4')])
或者最简单的数组:
In [168]: arr3 = np.array([23,2])
In [169]: arr3
Out[169]: array([23, 2])
写入数据集:
In [170]: ds.attrs.create('arr', arr)
In [172]: ds.attrs.create('arr2', arr2)
In [173]: ds.attrs.create('arr3', arr3)
检查抓取:
In [175]: ds.attrs['arr']
Out[175]: array([([23, 3],)], dtype=[('val1', '<i4', (2,))])
In [176]: ds.attrs['arr2']
Out[176]: array([(23, 3)], dtype=[('val1', '<i4'), ('val2', '<i4')])
In [177]: ds.attrs['arr3']
Out[177]: array([23, 2])
转储:
1203:~/mypy$ h5dump compound.h5
HDF5 "compound.h5" {
GROUP "/" {
DATASET "test" {
DATATYPE H5T_STD_I64LE
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
DATA {
(0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
}
ATTRIBUTE "arr" {
DATATYPE H5T_COMPOUND {
H5T_ARRAY { [2] H5T_STD_I32LE } "val1";
}
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): {
[ 23, 3 ]
}
}
}
ATTRIBUTE "arr2" {
DATATYPE H5T_COMPOUND {
H5T_STD_I32LE "val1";
H5T_STD_I32LE "val2";
}
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): {
23,
3
}
}
}
ATTRIBUTE "arr3" {
DATATYPE H5T_STD_I64LE
DATASPACE SIMPLE { ( 2 ) / ( 2 ) }
DATA {
(0): 23, 2
}
}
}
}
}