2017-11-11 88 views
0

我有一個包含一個巨大的值的量(約4個百萬值,一個用於上述TXT文件中的每一行)一個TXT文件的量的自相關和我想用MATLAB函數autocorr,以便計算上述一系列值的自相關。MATLAB - 巨大值

我的問題是,MATLAB不允許我創建一個具有儘可能多的元素的矢量,但是它的矢量大小僅限於〜25000個元素(在64位操作系統上)。

什麼將是一個聰明的方式來進行?提前謝謝了!

+0

我不認爲應該有一個問題,在今天的任何一臺電腦中生成400萬條記錄。 'double'值需要64位或8字節,所以你大概需要8 * 4 = 24 MB的RAM。 – flawr

回答

0

最簡單的方法可能是將文件數據分塊,計算每個塊的自相關,然後彙總結果。

在此基礎上擴展一點,您也可以使用移動窗口而不是離散塊(例如:觀察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循環的代價非常昂貴,您也可以直接在讀取文件塊的循環中計算自相關值。這樣你將直接收到最終結果。