Python 如何在h5py中使用HDF5尺寸标尺

Python 如何在h5py中使用HDF5尺寸标尺,python,hdf5,h5py,Python,Hdf5,H5py,HDF5具有尺寸尺度的概念,如图1和图2所示。然而,这些解释都使用了简洁或通用的例子,因此我并不真正理解如何使用维度尺度。即,给定某个HDF5文件中的数据集f['coordinates'],f=h5py.file('data.h5'): 我想说清楚,第一列是纬度,第二列是经度。尺寸标尺是否用于此?或者它们是用来表示单位是度。或者两者都有 也许另一个具体的例子可以更好地说明尺寸尺度的使用?如果您有一个,请分享它,即使您没有使用h5py。对于这个问题,最好的答案可能是使用: f['coordinat

HDF5具有尺寸尺度的概念,如图1和图2所示。然而,这些解释都使用了简洁或通用的例子,因此我并不真正理解如何使用维度尺度。即,给定某个HDF5文件中的数据集
f['coordinates']
f=h5py.file('data.h5')

我想说清楚,第一列是纬度,第二列是经度。尺寸标尺是否用于此?或者它们是用来表示单位是度。或者两者都有


也许另一个具体的例子可以更好地说明尺寸尺度的使用?如果您有一个,请分享它,即使您没有使用h5py。

对于这个问题,最好的答案可能是使用:

f['coordinates'].attrs['columns']=['latitude','longitude']
但是维度尺度对于其他事物是有用的。我将展示它们的用途,如何以类似于属性的方式使用它们,以及如何实际使用
f['coordinates']
数据集作为其他数据集的比例

尺度 我同意这些文档页面并没有像它们可能的那样清晰,因为它们在实际解释基本概念之前就进入了复杂的可能性和技术细节。我认为一些简单的例子应该让事情变得清楚

首先,假设你在一天的时间里一直跟踪室外的温度——可能每小时测量一次,总共24次。您可以将其视为两列数据:一列表示小时,另一列表示温度。您可以将其存储为24x2形状的单个数据集。但是时间和温度有不同的单位,并且是真正不同的数据类型。因此,将时间和温度存储为单独的数据集可能更有意义——可能分别命名为
“time”
“temperature”
,每个数据集的形状为24。但你也需要更清楚地了解这些是什么以及它们之间的关系。这种关系正是“维度尺度”的真正意义所在

如果将温度绘制为时间的函数,可以将水平轴标记为“时间(一天中的小时)”,水平轴的刻度将是小时本身,告诉您绘制每个温度的水平位置。您可以通过h5py存储此信息,如下所示:

将h5py.File(“temperatures.h5”、“w”)作为f:
时间=f.创建数据集(“时间”,数据=…)
时间。制作刻度(“一天中的小时”)
temp=f.create_数据集(“温度”,数据=…)
温度变暗[0]。label=“时间”
温度dims[0]。附加刻度(时间)
请注意,
make_scale
的参数是关于特定
时间
数据集的特定信息-在本例中,我们用于测量
时间
的单位-而
标签
是该维度的更一般概念。还要注意的是,将单位信息附加为属性实际上更为标准,但由于其简单性,我更喜欢这种方法来指定比例的单位

现在,假设我们测量了三个不同地方的温度,比如洛杉矶、芝加哥和纽约。现在,我们的温度阵列的形状是24x3。我们仍然需要
dim[0]
的时间刻度,但现在我们还需要处理
dim[1]

将h5py.File(“temperatures.h5”、“w”)作为f:
时间=f.创建数据集(“时间”,数据=…)
时间。制作刻度(“一天中的小时”)
cities=f.创建_数据集(“城市”,
数据=[s.encode()表示[“洛杉矶”、“芝加哥”、“纽约”]]
)
城市。形成规模(“城市”)
temp=f.create_数据集(“温度”,数据=…)
温度变暗[0]。label=“时间”
温度dims[0]。附加刻度(时间)
临时dims[1]。label=“位置”
温度dims[1]。附加刻度(城市)
存储纬度和经度可能比存储城市名称更有用。实际上,可以将这两种比例附着到同一标注。只需在最后一个代码块的底部添加如下代码:

latlong=f.create_数据集(“latlong”,
数据=[[34.0522118.2437],[41.878187.6298],[40.712874.0060]]
)
latlong.make_刻度(“纬度和经度(度)”)
温度dims[1]。附加刻度(拉长)
最后,您可以按如下方式访问这些标签和比例:

将h5py.File(“temperatures.h5”、“r”)作为f:
打印('数据集',列表(f))
打印(‘温度标注标签:’,[f中尺寸标注的尺寸标注标签[‘温度’].dims])
打印('Temperature dim[1]刻度:',f['Temperature'].dims[1].keys())
latlong=f[“温度]。dims[1][“纬度和经度(度)”[:]
打印(拉长)
输出如下所示:

数据集:['cities','latlong','temperature','time']
温度标注标签:[“时间”、“位置”]
温度暗度[1]标度:[“城市”、“纬度和经度(度)”]
[[ 34.0522 118.2437]
[ 41.8781  87.6298]
[ 40.7128  74.006 ]]

我想您应该使用
dims
标签
。从
h5py
链接中,
f['data'].dims[0]。label='z'
@hpaulj感谢您的思考。为了弄清楚标签在具体上下文中应该是什么(因此不是一些通用的
'z'
),我需要首先了解使用的维度比例,最好是一个具体的例子。这只是供您参考<代码>hdf5不使用它-除非有文档记录。
>>> f['coordinates'].value
array([[ 52.60636111,   4.38963889],
   [ 52.57877778,   4.43422222],
   [ 52.58319444,   4.42811111],
   ..., 
   [ 52.62269444,   4.43130556],
   [ 52.62711111,   4.42519444],
   [ 52.63152778,   4.41905556]])