2017-09-03 47 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