2014-03-31 56 views
0

我试图使用HDF5来存储时间序列的EEG数据。这些文件可能非常大,由许多通道组成,我喜欢HDF5文件格式(惰性I/O,动态压缩,mpi等)的功能。HDF5数据集中事件的链接

脑电图数据的一个常见问题是将数据部分标记为“有趣”。我正在努力将这些标记存储在文件中。我看到支持将相同数据集链接到其他组等的软/硬链接 - 但我没有看到链接到数据集部分的任何方式。

例如,假设我有一个名为EEG的数据集,其中包含睡眠数据。比方说,我运行一个算法需要一段时间来处理数据并生成与REM睡眠周期对应的索引。将这些索引范围存储在HDF5文件中的最佳方法是什么?

现在我能想到的最好的方法是创建一个包含三列的数据集 - 第一列是一个字符串并包含事件标签(“REM1”),第二列/第三列包含开始/结束索引。我不喜欢这个解决方案的唯一原因是因为HDF5数据集的大小相当大 - 如果我后来决定一段REM睡眠时间被错误识别,并且我需要添加/删除该事件,则数据集大小需要改变(并删除数据集/重新创建一个新的大小是不理想的)。由于我可能有很多事件(想象标记眼睛眨眼事件)这一事实使这变得更复杂,这变得更加棘手。

我更想知道HDF5文件中是否有功能,我只是不知道,因为这似乎是一个很常见的事情,人们会想要做的。

+0

如何使用hyperslabs和区域?或者,您可以将“REM1”作为属性,将其数据作为开始和结束索引。思考? –

+0

Hyperslabs和Regions正是我用来分割文件的东西。我的问题在于能够将这些hyperslab选择/区域作为“链接”存储在文件中。与软链接可以链接到另一个组的方式相同,数据集软链接可以简单地作为另一个数据集中的hyperslab选项。我考虑使用属性,但我需要属性来指示像采样率,通道标签等东西。我目前正在使用具有事件名称,开始/停止索引和有效位的可扩展数据集 - 删除事件只是设置有效在这个'事件'数据集中输入从1到0。 – Griffin

回答

0

我想你想要的是一个区域参考 - 本质上,一种方法来存储对您的数据切片的引用。在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 

您可以将regionrefs漂亮自然 - 它们可以是数据集上的属性,组中的对象,或者可以创建regionref类型的数据集并将它们存储在那里。

就你而言,我可能会创建一个组(“REM_periods”或其他)并将引用存储在那里。创建一个“REM_periods”数据集并存储regionrefs也是合理的,但是您会遇到整个“数据集趋向于变长非常好”的问题。

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