特征稀疏矩阵得到非零元素指数

时间:2015-03-04 12:33:40

标签: eigen sparse-matrix

我第一次使用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。

3 个答案:

答案 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)
    }
}