三元组

时间:2015-04-23 17:18:16

标签: c++ sparse-matrix eigen

使用eigen(c ++)我希望得到与Matlab相似的结果:



 % Matlab code: Create a 1500-by-1500 sparse matrix from the triplets i, j, 
            and v 
 i = [900 1000];
   j = [900 1000];
   v = [10 100];
   S = sparse(i,j,v,1500,1500)

   %result
    S =

 (900,900)     10
 (1000,1000)   100




我想在C ++中做同样的事情,我在不同的帖子中看到我们可以使用Eigen Library处理稀疏矩阵,但我并不真正理解如何做到这一点。你能帮助我吗 ?

由于

1 个答案:

答案 0 :(得分:1)

创建三元组载体

typedef Eigen::Triplet<int> Trip;
std::vector<Trip> trp;

创建三元组

trp.push_back(Trip(900,900,10)); // (index, index, value)
trp.push_back(Trip(1000,1000,100));

将它们分配给稀疏特征矩阵

int rows, cols;
rows = cols = 1500;
Eigen::SparseMatrix<int> A(rows,cols);

A.setFromTriplets(trp.begin(), trp.end());

打印整个(密集)矩阵

std::cout << A << std::endl;

或仅打印索引和值

std::cout << "Row\tCol\tVal" <<std::endl;
for (int k=0; k < A.outerSize(); ++k)
{
    for (SparseMatrix<int>::InnerIterator it(A,k); it; ++it)
    {
        std::cout << it.row() << "\t"; // row index
        std::cout << it.col() << "\t"; // col index (here it is equal to k)
        std::cout << it.value() << std::endl;
    }
}