【问题标题】:HDF5 Links to Events in DatasetHDF5 链接到数据集中的事件
【发布时间】: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


【解决方案1】:

我认为你想要的是一个区域引用——本质上,一种存储对数据切片的引用的方法。在h5py 中,您可以使用regionref 属性和numpy 切片语法创建它们,因此如果您有一个名为ds 的数据集以及您的REM 周期的startend 索引,您可以这样做:

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 也是合理的,但是你会遇到整个“数据集往往不是可变长度”的事情。

将它们作为 attrs 存储在数据集上也可能没问题,但如果您想要拥有多个事件类型,这会变得很尴尬。

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 2017-03-13
    • 2017-02-24
    • 2022-11-12
    • 2015-03-06
    • 2017-10-27
    • 2017-01-21
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多