我看到在新的 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/