Matlab处理大数据

时间:2015-11-23 08:18:50

标签: matlab bigdata

我必须阅读然后处理大量数据(矩阵:~40.000.000x19)。

第一步是读取数据:

Array = load('vort.dat');

flie' vort.dat'包含~40.000.000(imax * jmax * kmax)行和19行,第一行是:

 3.53080034E-03   0.00000000       1.25000002E-02   63.0216064      -3.03968048      -358.802948      -744.902588      -2.51340670E-10   2.11566061E-04   18.6898212       72.3569489      0.727692425      0.754972637      0.661218643       1.50408816       1.87408039E-03 5.69900125E-03   0.00000000       0.00000000

比我遍历数组并将后处理的各种值存储到单独的数组中:

imax=511;
jmax=160;
kmax=399;
for q=1:length(Array(:,1))
    Rp(k,j,i)=Array(q,1);
    yp(k,j,i)=(0.5-Rp(k,j,i))*360;
    ...

    % index variables
    k=k+1;
    if(k>kmax)
        k=1;
        i=i+1;
        if(i>imax)
            i=1;
            j=j+1;
            if(j>jmax)
                j=1;
            end
        end
    end
end

比后期处理开始!

问题是matlab在数据处理期间或绘制数字时没有出现警告而崩溃!

我已经将堆栈大小设置为无限制(ulimit -s unlimited)。

第二个想法是使用memmapfile,看起来它正在工作,但后处理的图表显示它没有读取正确的数据!

%%% Array = load('vort.dat');
m=memmapfile('data.dat','Format',{'double',[imax*jmax*kmax 19], 'x'},'repeat', 1);
Array=m.data.x;

1 个答案:

答案 0 :(得分:1)

如果您在预处理期间内存不足,您可能需要在加载大量数据之前清除MATLAB的内存:

clear('all');
Array = load('vort.dat');
%'Here continues the pre-processing'

如果您在后期处理过程中内存不足,则可能需要在不再使用大量变量后清除它们。例如,由于预处理后不再使用Array,因此请使用以下命令开始后处理:

clear('Array');

或更简单:

Array = 0;

考虑到矩阵的大小,这应该释放足够的内存,以便您继续进行后处理和报告。

因此,例如,脚本看起来像:

%//Preparing
clear('all');           %//Start with fresh memory
dbstop('if', 'error');  %//Trap uncaught exceptions

%//Loading
A = load('vort.dat');

%//Pre-processing, vectorized operations
I = 511;
J = 160;
K = 399;
Rp = permute(reshape(A(:,1),K,I,J), [1 3 2]);
yp = (0.5 - Rp)*360;
%//...

%//Post-processing
clear('A');   %//and other vars not needed anymore
%//...