0
我有一個包含一個巨大的值的量(約4個百萬值,一個用於上述TXT文件中的每一行)一個TXT文件的量的自相關和我想用MATLAB函數autocorr
,以便計算上述一系列值的自相關。MATLAB - 巨大值
我的問題是,MATLAB不允許我創建一個具有儘可能多的元素的矢量,但是它的矢量大小僅限於〜25000個元素(在64位操作系統上)。
什麼將是一個聰明的方式來進行?提前謝謝了!
我有一個包含一個巨大的值的量(約4個百萬值,一個用於上述TXT文件中的每一行)一個TXT文件的量的自相關和我想用MATLAB函數autocorr
,以便計算上述一系列值的自相關。MATLAB - 巨大值
我的問題是,MATLAB不允許我創建一個具有儘可能多的元素的矢量,但是它的矢量大小僅限於〜25000個元素(在64位操作系統上)。
什麼將是一個聰明的方式來進行?提前謝謝了!
最簡單的方法可能是將文件數據分塊,計算每個塊的自相關,然後彙總結果。
在此基礎上擴展一點,您也可以使用移動窗口而不是離散塊(例如:觀察1-30,然後2-31,然後3-32,...)。
但讓我們堅持第一種方法。這是一個可以讓你指定一個塊的長度,然後讀取文件塊:
function res = readFileChunks(file,chunkSize)
fid = fopen(file,'r');
if (fid < 0)
error('Cannot open file "%s".',file);
end
res = {};
while (~feof(fid))
res{end+1} = fscanf(fid,'%f',[1 chunkSize])';
end
fclose(fid);
end
例子:
res = readFileChunks('data.txt',2500);
現在,所有你需要做的就是清理你的結果(結算,對於例如,由空文件行引起的空單元格)並將您的自相關處理爲每個矢量的循環。
由於Matlab循環的代價非常昂貴,您也可以直接在讀取文件塊的循環中計算自相關值。這樣你將直接收到最終結果。
我不認爲應該有一個問題,在今天的任何一臺電腦中生成400萬條記錄。 'double'值需要64位或8字節,所以你大概需要8 * 4 = 24 MB的RAM。 – flawr