我有一個二維矩陣,其列大小在每次迭代後增加,但行大小保持不變。對於每次迭代,函數都會返回一個我想水平堆疊的矩陣。以下是我嘗試的代碼,但我認爲我在big_mat [ii] .insert部分中做了錯誤的操作。但是我環顧四周,發現了垂直堆棧的代碼,您可以從big_mat.end()開始並執行插入操作。但我希望行大小保持不變。你能幫我解決這個問題嗎?最大最終尺寸也是1,000,000乘以5,000。水平連接std :: vectors的正確方法是什麼?
std::vector<std::vector<float> > big_mat;
big_mat.reserve(fixed_row_dim);
std::vector<std::vector<float> > small_mat;
for (some condition){
// small_mat is always fixed_row_dim x some_dim
small_mat = GetMat(params,fixed_row_dim);
for (int ii = 0; ii < fixed_row_dim; ii++){
big_mat[ii].insert(big_mat[ii].end(),small_mat[ii].begin(),small_mat[ii].end());
}
}
「但我認爲我做錯了什麼」:你認爲什麼是錯的,爲什麼? – JohnB
你的代碼有什麼問題?您是否意識到1,000,000 * 5,000 * sizeof(float)大約是20GB(因爲字節使用1024而不是1000,因此Kilo) – FrankM
@JohnB我打算擴展提供的解決方案[here](http://stackoverflow.com/問題/ 201718/concatenating-two-stl-vectors)兩個維度。但是big_mat [ii] .insert可能不是正確的方法。所以我想我錯了。 @ FrankM是的,我知道這一點。代碼將在羣集上運行。因此,對於每個作業ID,生成的數據的大小將線性減小,因爲第一批將比較0到N-1之間的相似度,然後是1到N-1之間的相似度,同樣如此。我目前正在測試一對。 – sm176357