eigen - 在 Eigen 稀疏矩阵中将行/列/ block 设置为 0?

标签 eigen

我看到在新的 Eigen 3.2 中,您可以从稀疏矩阵中获取行、列甚至 block ,有没有办法将其中任何一个设置为 0?

Eigen::SparseMatrix<float, Eigen::RowMajor> A( 5, 5 );
    A.block(1, 1, 2, 2) = 0; // won't work
    A.row(1) = 0; // won't work
    A.col(1) = 0; // won't work

谢谢!

最佳答案

对于 5x5 矩阵,使用稀疏矩阵就有点过分了。最好使用 MatrixXd ,甚至是 Matrix<float,5,5> .在这种情况下,您可以使用 A.row(1).setZero() 将行设置为零.对于大小约为 1000x1000 或更大的矩阵,稀疏矩阵是值得的。

不管怎样,一次性抑制一个稀疏矩阵的多列多行最好是使用prune方法。下面是删除第二行和第三列的示例:

#include <Eigen/Sparse>
#include <iostream>

using namespace Eigen;

int main()
{
  Eigen::SparseMatrix<float, Eigen::RowMajor> A;
  A = MatrixXf::Random(5,5).sparseView();
  A.prune([](int i, int j, float) { return i!=1 && j!=2; });
  std::cout << A << "\n";
}

关于eigen - 在 Eigen 稀疏矩阵中将行/列/ block 设置为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986305/

相关文章:

c++ - 从 std::vector 创建 Eigen::Ref

c++ - 从 Eigen 调用 Lapack 函数时出现段错误

c++ - 数组之间的特征行叉积

c++ - 在 Rcpp 中为 Galerkin 矩阵使用 Eigen c++ 库的问题

c++ - 性能:Matlab 与 C++ 矩阵 vector 乘法

c++ - 特征矩阵初始化的 clang 格式

c++ - 高效的张量乘法

c++ - 稀疏矩阵的填充速度非常慢,Eigen 中没有内存增益

c++ - c++ 中有没有办法不为项目的特定部分生成调试信息?

C++ 函数模板未推导特征向量大小