三元组的稀疏矩阵
sparse matrix from triplet
我希望使用 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 库处理稀疏矩阵,但我真的不明白如何做到这一点。你能帮助我吗 ?
谢谢
创建三元组向量
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;
}
}
我希望使用 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 库处理稀疏矩阵,但我真的不明白如何做到这一点。你能帮助我吗 ?
谢谢
创建三元组向量
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;
}
}