我尝试使用HDF5来存储时间序列的EEG数据。这些文件可能非常大并且由许多通道组成,我喜欢HDF5文件格式(懒惰I / O,动态压缩,mpi等)的功能。
与EEG数据有关的一个常见事项是将数据部分标记为“有趣”。我正在努力将这些标记存储在文件中。我看到支持将相同数据集链接到其他组等的软/硬链接 - 但我没有看到任何链接到数据集部分的方法。
例如,假设我有一个名为EEG的数据集,其中包含睡眠数据。让我们说我运行的算法需要一段时间来处理数据并生成与REM睡眠周期相对应的索引。在HDF5文件中存储这些索引范围的最佳方法是什么?
我现在能想到的最好的方法是创建一个包含三列的数据集 - 第一列是一个字符串,包含事件的标签(" REM1"),第二列/第三列column分别包含start / end索引。我不喜欢这个解决方案的唯一原因是因为HDF5数据集的大小非常大 - 如果我稍后决定REM睡眠时间被错误识别并且我需要添加/删除该事件,那么数据集大小需要更改(并删除数据集/使用新大小重新创建它是次优的)。由于我可能有许多事件(想象标记眨眼事件)这一事实使这更加复杂,这变得更加困难。
我更好奇地发现HDF5文件中是否存在我不知道的功能,因为这似乎是一个人们想要做的非常普遍的事情。
答案 0 :(得分:0)
我认为您想要的是区域参考 - 实质上是一种存储对数据切片的引用的方法。在h5py中,您使用regionref
属性和numpy切片语法创建它们,因此如果您有一个名为ds
的数据集以及start
和end
索引您的REM期限,您可以这样做:
rem_ref = ds.regionref[start:end]
ds.attrs['REM1'] = rem_ref
ds[ds.attrs['REM1']] # Will be a 1-d set of values
您可以非常自然地存储regionref - 它们可以是数据集中的属性,组中的对象,也可以创建regionref类型数据集并将其存储在那里。
在您的情况下,我可能会创建一个组(" REM_periods"或其他东西)并将引用存储在那里。创建" REM_periods"数据集和存储regionrefs也是合理的,但是你会遇到整个数据集,并且数据集往往不是很长的变量#34;的事情。
将它们存储为数据集上的attrs也可以,但如果您想拥有多个事件类型,它会变得很尴尬。