python - h5py:如何重命名尺寸?
问题描述
我创建了一个句柄为 fw 的新文件。
fw.create_dataset('grp1/varname',data=arr)
这些组是在此命令之前创建的。arr 是一个尺寸为 (2,3) 的 numpy 数组。文件创建成功。但是,尺寸被命名为 phony_0 和 phony_1。我如何将它们更改为 m 和 n ?
一般来说,如何在组中创建维度,然后将变量与它们关联?
我试过了,
fw['grp1/varname'].dims[0].label = 'm'
但这并没有达到预期的效果。
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
谢谢
print([ dim.label for dim in fw['grp1/varname'].dims]) 确实产生一致的输出。[你',你'']
hdffile 似乎没有将维度与组相关联的规定。但是 varname 是一个变量。如何获得:
variables:
float varname(m, phony_dim_1) ;
string varname:DIMENSION_LABELS = "m", NIL ;
} // group grp1
在 ncdump -h 或 h5dump 的输出中?我确实尝试了使用 h5dump 的不同选项。
谢谢。
解决方案
部分问题可能是您使用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
属性:
In [424]: ds.dims
Out[424]: <Dimensions of HDF5 object at 140382697336904>
In [426]: ds.dims[0]
Out[426]: <"" dimension 0 of HDF5 dataset at 140382697336904>
In [427]: ds.dims[0].label
Out[427]: ''
In [428]: ds.dims[0].label = 'm'
In [436]: dd=ds.dims[0]
In [437]: dd?
Type: DimensionProxy
String form: <"m" dimension 0 of HDF5 dataset at 140382697336904>
Length: 0
File: ~/.local/lib/python3.6/site-packages/h5py/_hl/dims.py
Docstring: Represents an HDF5 "dimension".
In [439]: dd.values()
Out[439]: []
In [440]: dd.label
Out[440]: 'm'
该组没有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
which 旨在显示netcdf
文件:
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 文件
如果不使用尺寸比例,netCDF-4 仍然可以编辑文件,并为每个可变形状发明匿名尺寸。
NETCDF 有共享维度,HDF5 有维度尺度。它们并不完全相同。
http://www.stcorp.nl/beat/documentation/harp/conventions/hdf5.html
在 HDF5 数据模型中,没有共享维度的概念(与 netCDF 不同)。HDF5 数据集的形状被指定为维度长度列表。但是,netCDF-4 库使用 HDF5 作为其存储后端。它使用 HDF5 尺寸比例表示共享尺寸。
推荐阅读
- function - 如何在 clisp 函数中将 .png 文件作为参数传递
- php - 如何在不刷新的情况下更新 PHP 页面
- python - 如何对列表中找到的迭代最大值求和,而不会与其他小于两个索引的先前最大值发生冲突?
- flutter - 颤振可注入解决包中的依赖项
- windows - windows用来在桌面之间切换的进程名称是什么?
- flutter - 如何访问不同类的变量?颤振(我想改变背景图片onpress)
- kotlin - 如何将值从recyclerview复制到kotlin中的剪贴板?
- windows - 无法删除 Windows 上包含 .git 的文件夹
- java - 在控制台中显示百分比(JAVA)
- javascript - 允许 Origins 后出现 CORS 错误