h5py:如何重命名维度?

2024-09-30 14:37:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个句柄为fw的新文件。在

fw.create_dataset('grp1/varname',data=arr)

组在该命令之前创建。arr是一个维数为(2,3)的numpy数组。文件创建成功。但是,维度被命名为fany_0和fany_1。我怎么把它们改成m和n?在

一般来说,如何在一个组中创建一个维度和一个变量相关联?在

我试过了

^{pr2}$

但这并没有达到预期的效果。在

创建的文件上的ncdump -h显示:

group: grp1 {

        dimensions:
                phony_dim_0 = 2 ;
                phony_dim_1 = 3 ;

        variables:

                float varname(phony_dim_0, phony_dim_1) ;
                        string varname:DIMENSION_LABELS = "m", NIL, NIL ;
        } // group grp1

谢谢

打印([尺寸标签对于fw中的尺寸['grp1/varname'].dims]) 产生一致的输出。 [你,你'']

似乎hdffiles没有将维度与组关联起来的规定。但是varname是一个变量。如何获得:

   variables:
            float varname(m, phony_dim_1) ;
                    string varname:DIMENSION_LABELS = "m", NIL ;
    } // group grp1

在ncdump-h或h5dump的输出中?我确实尝试了不同的选择与h5dump。在

谢谢。在


Tags: 文件stringgroupvariablesfloatnilarrdim
2条回答

您的输出表明varname数据集的第一个维度标签是“m”。那些假冒的标签只包含每个维度的实际大小,它们不是标签。在

print([dim.label for dim in fw['grp1/varname'].dims])的输出是什么?在

部分问题可能是您使用ncdump。在

我可以创建一个简单的文件,并为数据集设置dims标签:

In [420]: import h5py
In [421]: f = h5py.File('testdim.h5','w')
In [422]: ds = f.create_dataset('grp1/varname', data = np.arange(10))
In [423]: ds
Out[423]: <HDF5 dataset "varname": shape (10,), type "<i8">

查看dims属性:

^{pr2}$

组没有dims

In [442]: g = f['grp1']
In [443]: g
Out[443]: <HDF5 group "/grp1" (1 members)>
In [444]: g.dims
AttributeError: 'Group' object has no attribute 'dims'

In [446]: f.flush()

使用h5dump

1902:~/mypy$ h5dump testdim.h5 
HDF5 "testdim.h5" {
GROUP "/" {
   GROUP "grp1" {
      DATASET "varname" {
         DATATYPE  H5T_STD_I64LE
         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
         DATA {
         (0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
         }
         ATTRIBUTE "DIMENSION_LABELS" {
            DATATYPE  H5T_STRING {
               STRSIZE H5T_VARIABLE;
               STRPAD H5T_STR_NULLTERM;
               CSET H5T_CSET_ASCII;
               CTYPE H5T_C_S1;
            }
            DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
            DATA {
            (0): "m"
            }
         }
      }
   }
}
}

使用旨在显示ncdump文件的ncdump

1902:~/mypy$ ncdump -h testdim.h5 
netcdf testdim {

group: grp1 {
  dimensions:
    phony_dim_0 = 10 ;
  variables:
    int64 varname(phony_dim_0) ;
        string varname:DIMENSION_LABELS = "m" ;
  } // group grp1
}

我尽可能地,h5df格式没有组维度;ncdump为此创建了一个伪属性。在

为了重申对上一个问题的答案,HDF5尺寸的文档是:

http://docs.h5py.org/en/latest/high/dims.html

https://www.unidata.ucar.edu/software/netcdf/docs/interoperability_hdf5.html

对于HDF5文件

If dimension scales are not used, then netCDF-4 can still edit the file, and will invent anonymous dimensions for each variable shape.

NETCDF具有共享维度,HDF5具有维度刻度。他们不太一样。在

http://www.stcorp.nl/beat/documentation/harp/conventions/hdf5.html

In the HDF5 data model there is no concept of shared dimensions (unlike netCDF). The shape of an HDF5 dataset is specified as a list of dimension lengths. However, the netCDF-4 library uses HDF5 as its storage backend. It represents shared dimensions using HDF5 dimension scales.

相关问题 更多 >