2014-03-31 53 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存儲在數據集上可能也沒問題,但如果您想要有多個事件類型,它會變得很笨拙。