2016-08-17 108 views
0

高效複製大矩陣的std /鑄造::矢量<性病::矢量<double>>和犰狳ARMA ::墊

  std::vector<std::vector<double>> std_mat 
      arma::mat arma_mat 

之間的有效的複製機制,其中ARMA ::墊arma_mat指犰狳矩陣/數學庫。

http://arma.sourceforge.net/

我的項目依賴於其中矩陣定義分別與上述兩個單獨的矩陣/數據採集庫。但是,在處理流水線的某個階段,我需要將其中一個複製到另一個,以避免破壞遺留代碼。我想知道是否有某種類型的鑄造操作符從一個到另一個(所以我們不必複製),或者如果沒有,有效的複製機制(類似於vector.emplace_back概念)。現在我使用雙循環,但我相信它可以更高效。

回答

2

你可以通過改變你使用矢量/內存的方式來避免複製。

如果看看documentation

mat(ptr_aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = false)

創建使用從可寫輔助(外部)存儲器,其中ptr_aux_mem是指向存儲器中的數據的矩陣。默認情況下, 矩陣分配自己的內存並從內存中複製數據(爲了安全起見)。但是,如果copy_aux_mem設置爲false,那麼 矩陣將直接使用輔助存儲器(即,不復制 );這是更快,但可能是危險的,除非你知道你在做什麼 !

如果您知道您的矩陣具有固定大小,則可以通過提供大塊內存來構造mat。該文件說要小心:

元素存儲與列主要排序(即逐列)。

+0

是列專業連續或在堆?我猜,連續性會讓事情變得簡單。感謝您的建議。我會研究詳細的文檔。 – Pal

+0

看起來像是連續的,最好看看文檔:) –

相關問題