【发布时间】:2014-05-11 00:46:12
【问题描述】:
我正在尝试使用 HDF5 存储时间序列 EEG 数据。这些文件可能很大并且包含许多通道,我喜欢 HDF5 文件格式的特性(惰性 I/O、动态压缩、mpi 等)。
EEG 数据的一个常见做法是将数据部分标记为“有趣”。我正在努力寻找一种将这些标记存储在文件中的好方法。我看到支持将同一数据集链接到其他组等的软/硬链接 - 但我看不到任何链接到数据集部分的方法。
例如,假设我有一个名为 EEG 的数据集,其中包含睡眠数据。假设我运行了一个算法,该算法需要一段时间来处理数据并生成与 REM 睡眠周期相对应的索引。将这些索引范围存储在 HDF5 文件中的最佳方法是什么?
我现在能想到的最好的方法是创建一个包含三列的数据集——第一列是一个字符串,包含事件的标签(“REM1”),第二/第三列包含开始/分别结束索引。我不喜欢这个解决方案的唯一原因是因为 HDF5 数据集的大小相当固定——如果我后来决定错误识别了一段时间的 REM 睡眠并且我需要添加/删除该事件,那么数据集大小将需要更改(并删除数据集/用新大小重新创建它是次优的)。再加上我可能有很多事件(想象标记眨眼事件),这变得更加成问题。
我更想知道 HDF5 文件中是否有我不知道的功能,因为这似乎是一件很常见的事情。
【问题讨论】:
-
使用 hyperslabs 和区域怎么样?或者您可以将“REM1”写为一个属性,它的数据是开始和结束索引。想法?
-
Hyperslabs 和 Regions 正是我用来分割文件的。我的问题在于能否将这些 hyperslab 选择/区域存储为文件中的“链接”。与软链接可以链接到另一个组的方式相同,数据集软链接可以简单地是对另一个数据集的 hyperslab 选择。我考虑使用属性,但我需要属性来指示采样率、通道标签等。我目前正在使用带有事件名称、开始/停止索引和有效位的可扩展数据集——删除事件只是设置有效这个“事件”数据集中的条目从 1 到 0。
标签: python bioinformatics hdf5 h5py