2017-09-03 84 views
0

我在Eigen C++中有一個稀疏矩陣A。現在我想將它對稱化到另一個稀疏矩陣Asym如何在Eigen C++中對稱稀疏矩陣?

我希望如此,因爲它是那麼簡單:

Eigen::SparseMatrix<FLOATDATA> A; 
... 
Eigen::SparseMatrix<FLOATDATA> Asym = 0.5*(A+A.transpose()); // error here 

但由於顯而易見的原因,它提供了以下斷言失敗錯誤:

error: static assertion failed: THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH 

我的問題是如何在Eigen C++中整齊地做上述操作?

+0

是一種對稱?如果沒有,你可能不會添加A及其轉置。換句話說,當且僅當m == n時,可以添加兩個矩陣mxn和nxm。我也從未見過A + A^T執行的單一公式。你是否在嘗試A^T x A,這有時候很有意義。 –

回答

1

使你的代碼編譯最簡單的方法是將轉置矩陣評估到臨時正確的存儲順序:

Eigen::SparseMatrix<FLOATDATA> Asym = 0.5*(A+Eigen::SparseMatrix<FLOATDATA>(A.transpose()))); 
+0

謝謝!你認爲這樣做會優化臨時轉置嗎? – user62039

+0

它沒有擺脫臨時 - 我不認爲有一個有效的算法來添加具有不同存儲順序的稀疏矩陣(也許除非可以利用矩陣的某些特殊結構)。 – chtz