c++ - 如何在 C++ 的 Eigen 中交换对称稀疏矩阵中的列和行?

标签 c++ eigen rcpp

我正在尝试为稀疏对称矩阵实现以下密集矩阵运算:

    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的使用,但没有解释如何构造置换矩阵: Permuting sparse matrices in Eigen

我很难理解 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);

关于c++ - 如何在 C++ 的 Eigen 中交换对称稀疏矩阵中的列和行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454261/

相关文章:

r - 如何调整 NumericVector 的大小?

C++ std::set 自定义比较器

c++ - Eigen :返回对具有编译时维度检查的矩阵 block 的引用

c++ - 如何向 Eigen 中的每一行添加一个 vector ?

具有 Rcpp::Function 成员的 C++ 类

c++ - Rcpp错误,在mac上学习Rcpp和C++

c++ - 为什么我在使用 libexpect.so 的简单 C++ 程序中会出现段错误?

c++ - 警告 : base class ‘A’ should be explicitly initialized in the copy constructor

c++ - 你能在 ctor 中设置 weak_ptr<> 吗?

c++ - 返回 Eigen::Ref 是否合法?