HDF5链接到数据中的事件

2024-10-04 01:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用HDF5来存储时间序列的脑电图数据。这些文件可能非常大,包含许多通道,我喜欢HDF5文件格式的特性(延迟I/O、动态压缩、mpi等)。在

处理脑电图数据的一个常见做法是将数据的部分标记为“有趣”。我正在努力寻找一个好的方法来将这些标记存储在文件中。我看到软/硬链接支持将同一数据集链接到其他组,等等——但我看不到任何链接到数据集部分的方法。在

例如,假设我有一个叫做EEG的数据集,其中包含睡眠数据。假设我运行了一个算法,它需要一段时间来处理数据并生成与快速眼动睡眠期相对应的索引。在HDF5文件中存储这些索引范围的最佳方法是什么?在

我现在能想到的最好方法是创建一个包含三列的数据集——第一列是一个字符串,包含事件的标签(“REM1”),第二列/第三列分别包含开始/结束索引。我不喜欢这个解决方案的唯一原因是HDF5数据集的大小设置得很好——如果我后来决定错误地识别了一段REM睡眠期,我需要添加/删除该事件,那么数据集的大小就需要改变(删除数据集/用新的大小重新创建数据集是次优的)。再加上我可能有很多事件(想象一下标记眼球链接事件),这就成了一个更大的问题。在

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


Tags: 文件数据方法标记链接时间事件动态
1条回答
网友
1楼 · 发布于 2024-10-04 01:35:38

我认为您需要的是一个区域引用—本质上,一种存储对数据片段的引用的方法。在h5py中,使用regionref属性和numpy切片语法创建它们,因此,如果您有一个名为ds的数据集和您的REM周期的start和{}索引,则可以执行以下操作:

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_nuperiods”或其他东西)并将引用存储在那里。创建一个“REM_periods”数据集并将regionref存储在那里也是合理的,但是你会遇到整个“数据集往往不是可变长度的”事情。在

将它们作为attr存储在数据集中也可以,但是如果您希望有一个以上的事件类型,则会很尴尬。在

相关问题 更多 >