如何在 C++ 的 Eigen 中交换对称稀疏矩阵中的列和行?
How do I swap both columns and rows in a symmetrical sparse matrix in C++'s Eigen?
我正在尝试为稀疏对称矩阵实现以下密集矩阵运算:
dm.col(j).swap(dm.col(i));
dm.row(j).swap(dm.row(i));
为了交换稀疏对称矩阵中的两列(和两行),我试图生成一个置换矩阵,以便我可以将它传递给 .twistedBy():
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> P;
P.setIdentity();
P.col(j).swap(P.col(i));
sm = sm.twistedBy(P);
遗憾的是,置换矩阵不支持 .col().swap()。我该怎么办?
这道题阐明了.twistedBy的用法,但没有解释如何构造置换矩阵:
我很难理解 eigen 的文档:
https://eigen.tuxfamily.org/dox/classEigen_1_1PermutationMatrix.html
如能提供一般性帮助,我们将不胜感激!
感谢您的宝贵时间!
您正在寻找applyTranspositionOnTheRight
:
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic >::PermutationMatrix P(n);
P.setIdentity();
P.applyTranspositionOnTheRight(j, i);
我正在尝试为稀疏对称矩阵实现以下密集矩阵运算:
dm.col(j).swap(dm.col(i));
dm.row(j).swap(dm.row(i));
为了交换稀疏对称矩阵中的两列(和两行),我试图生成一个置换矩阵,以便我可以将它传递给 .twistedBy():
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> P;
P.setIdentity();
P.col(j).swap(P.col(i));
sm = sm.twistedBy(P);
遗憾的是,置换矩阵不支持 .col().swap()。我该怎么办?
这道题阐明了.twistedBy的用法,但没有解释如何构造置换矩阵:
我很难理解 eigen 的文档: https://eigen.tuxfamily.org/dox/classEigen_1_1PermutationMatrix.html
如能提供一般性帮助,我们将不胜感激!
感谢您的宝贵时间!
您正在寻找applyTranspositionOnTheRight
:
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic >::PermutationMatrix P(n);
P.setIdentity();
P.applyTranspositionOnTheRight(j, i);