我想重現一箇舊的R代碼,爲了獲得一些速度,我已經加入了C++。 此代碼要求使用預加載的數據(6維矩陣13689 x 126)(每個文件在.txt文件中的權重均爲28 MB)。它沒有引起任何問題,R將它加載到內存中。在C++中讀取'大'數據文件
我構建了一個C++代碼(我是C++的新手),我試圖「預加載」這些數據(是否有預加載它在頭文件btw?)。
int i, j;
const int length_grid1 = 13689;
const int length_grid_pl = 126;
ifstream in;
//double M1_BETA[length_grid1][length_grid_pl]; // either this, or the other one
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA;
in.open("preloaded_object/M1_BETA.txt");
for (i = 0; i < length_grid1; i++) {
for (j = 0; j < length_grid_pl; j++) {
in >> M1_BETA[i][j];
}
}
in.close();
兩個版本,採用雙層或數組不起作用:我可以編譯的文件(使用英特爾作曲),但是當我啓動.exe文件,它會立即崩潰。發生這種情況只有一個矩陣加載...我必須加載其中的6個。
我不認爲這是來自我的代碼的問題,當我減少它自己執行的數據維度沒有任何問題。
請注意,如果所有內容都未加載,我無法在此後運行該程序。重新加載它會部分地減少我認爲的速度(爲了獲得計算速度,我轉而使用C++)。
程序崩潰是因爲28MB太多了嗎?似乎很奇怪,因爲R沒有任何問題,例如...
否則,我可以預加載的方式,使其佔用內存較少的地方?之後我需要輕鬆訪問任何一行數據(逐個單元格並不那麼重要,我真正需要的是真正快速訪問特定行)。
或者,在C++中是否還有另一種存儲數據的方式,可以隨時使用?
在此先感謝。
'std :: array,length_grid1> M1_BETA;'通常在堆棧實例化,這對於大多數環境中的堆棧來說太大了,是的。 –
你應該爲大數據使用'std :: vector'。 – NathanOliver
它確實與std :: vector一起工作,謝謝!數組有什麼不同? –