Python 使用h5py创建HDF5复合属性

Python 使用h5py创建HDF5复合属性,python,numpy,hdf5,h5py,Python,Numpy,Hdf5,H5py,我试图创建一些简单的HDF5数据集,其中包含使用h5py的复合数据类型的属性。目标是一个具有两个整数的属性。下面是我想创建的两个属性示例 我的尝试以两个值的数组结束,例如 如何使用h5py编写代码并获得包含两个整数的单个值? 当前代码看起来像 dt_type = np.dtype({"names": ["val1"],"formats": [('<i4', 2)]}) # also tried np.dtype({"names": ["val1", "val2"],"formats

我试图创建一些简单的HDF5数据集,其中包含使用h5py的复合数据类型的属性。目标是一个具有两个整数的属性。下面是我想创建的两个属性示例

我的尝试以两个值的数组结束,例如

如何使用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=np.dtype({“name”:[“val1”],“formats”:[('要使用
dt_type
创建数组,必须正确嵌套列表和元组:

In [162]: arr = np.array([(['23','3'],)], dt_type)                                             
In [163]: arr                                                                                  
Out[163]: array([([23,  3],)], dtype=[('val1', '<i4', (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])

h5py
code工作了吗?错误?错误的属性?基本上
h5py
numpy
数组写入和读取到HDF5文件,并进行必要的翻译。h5py代码将生成错误的属性。我还没有想出生成{int,int}属性的神奇语法。
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
         }
      }
   }
}
}