我第一次使用Eigen Sparse Matrices,现在我想知道如何获得非零元素的索引。 我按如下方式构建了稀疏矩阵:
Eigen::SparseMatrix<Eigen::ColMajor> Am(3,3);
我可以通过查看m_indices变量来查看VS中的一些索引。但我无法访问它们。谁能帮帮我吗? 对于像
这样的矩阵( 1 0 1
0 1 1
0 0 0 )
我希望指数与(0,0), (0,2), (1,1), (1,2)
类似。
有什么办法吗?
P.S。我的矩阵大于3x3。
答案 0 :(得分:6)
tutorial的代码类似于:
for (int k=0; k < A.outerSize(); ++k)
{
for (SparseMatrix<int>::InnerIterator it(A,k); it; ++it)
{
std::cout << "(" << it.row() << ","; // row index
std::cout << it.col() << ")\t"; // col index (here it is equal to k)
}
}
答案 1 :(得分:1)
使用libigl的igl::find
,您可以将非零的索引提取到特征向量中:
Eigen::VectorXi I,J;
Eigen::VectorXd V;
igl::find(Am,I,J,V);
在您的示例中,这些内容将包含:
I: 0 1 0 1
J: 0 1 2 2
V: 1 1 1 1
答案 2 :(得分:0)
Eigen::SparseMatrix<int, Eigen::ColMajor> A(2,3);
for (int k=0; k < A.outerSize(); ++k)
{
for (Eigen::SparseMatrix<int,Eigen::ColMajor>::InnerIterator it(A,k); it; ++it)
{
std::cout << "(" << it.row() << ","; // row index
std::cout << it.col() << ")\t"; // col index (here it is equal to k)
}
}