2015-11-02 31 views
1

我從基於代理的NetLogo仿真中獲得260 GB數據。數據已經以某種方式進行了準備,可以有效地用於可視化和分析。的數據當前分成.MAT文件,每個文件包含4維陣列,其中的在MATLAB中使用大型多維數組

270 x 2502 x 9 x 50 

大小當加載,一個陣列使用2.26 GB的內存。這大約需要5秒鐘。總共有超過100個文件。到目前爲止,我的方法是遍歷.mat文件,使用load,使用數據(例如繪製曲線),使用clearvars並繼續下一個文件。

不用說,這是一個天真的方法,需要太多的時間。 datastore不是一個選項,因爲我有4維數據和.mat文件。還有另一種更有效地處理這種情況的方法嗎?大多數時候,我只使用一小組這樣的陣列,例如一名維定:

A(:, :, 1, :) 
+0

['memmapfile'](https://uk.mathworks.com/help/matlab/ref/memmapfile.html)也許?儘管您仍然需要找到一種方法來創建文件,而不會耗盡內存。 – IKavanagh

+0

如何將數據保存到原始二進制文件(而不是'mat'文件),然後您可以使用'fread'和'fseek'只讀取需要的部分。您可以編寫一個包裝來幫助您加載所需的維度。 –

+0

看看hdf5文件格式,有時對大數據非常有用。 –

回答

2

可以使用matfile功能的matfile的子集加載到內存中,而無需加載整個文件。由於.mat是HDF5格式的一個子集,因此大多數用途都是(幾乎)等價的。然而,由於matlab開發人員的技能,也取決於您的工作流程,所以不能保證比現在所做的任何更快。

+0

@HennadiiMedan正如你所說,這不是最快的解決方案,但比我在這個問題的評論中提出的建議更具有說服力。 – sfat