cell2mat loops & running out of memory
显示 更早的评论
Aloha,
I need to process 72 hours of sampling at a rate of 25.6 kHz. The MatLab files I am given have the form of a structure, with string fields containing instrument information, units, etc. The numerical data itself is contained in 262144x2 double fields named StreamSegment000000_000255, StreamSegment000256_000511, and so forth, each of which containing 10.24 seconds of data. The file I am currently working on has roughly 2 hours of data, divided into 703 10.24-second fields of size 262144x2 double and a 2.84-second field of size 72704x2 double (of course, files will have different sizes). The first thing I need to compute is 30-second RMS for all 72 hours. Here is my approach:
S=load('REC0049.mat');
cell0=struct2cell(S);
C=cell0(3:end,:); % crops out the first 2 arrays of junk information
Now cell2mat(C) will of course lead me "??? Error using ==> cat; Out of memory", so I tried to break down to several matrices.
for i=1:number
eval(sprintf('M%d = cell2mat(C((1+3*(i-1)):(3*i),:));', i));
end
If number=235, obtaining 235 matrices each containing 3 of these 10.24-second fields would allow me to easily compute 30.72-second rms (close enough) for these 2 hours. Of course, this works just fine for small "numbers", but I quickly encounter "*??? Error using ==> cat Out of memory" again.
I could try nested for-loops and progressively clear out the memory, but I am sure there are solutions that are a lot more elegant and efficient.
Thank you!
采纳的回答
更多回答(1 个)
Malcolm Lidierth
2013-1-5
0 个投票
Depending on the MAT-file version, there may be something that could help in:
类别
在 帮助中心 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!