C++ 三元组稀疏矩阵

C++ 三元组稀疏矩阵,c++,sparse-matrix,eigen,C++,Sparse Matrix,Eigen,对于eigen(c++),我希望得到与Matlab类似的结果: %Matlab代码:从三元组i,j, 及v i=[900 1000]; j=[900 1000]; v=[10100]; S=稀疏(i,j,v,15001500) %结果 = (900,900) 10 (10001000)100创建三联体的向量 typedef Eigen::Triplet<int> Trip; std::vector<Trip> trp; 将它们分配到稀疏特征矩阵 int row

对于eigen(c++),我希望得到与Matlab类似的结果:

%Matlab代码:从三元组i,j,
及v
i=[900 1000];
j=[900 1000];
v=[10100];
S=稀疏(i,j,v,15001500)
%结果
=
(900,900)     10

(10001000)100
创建三联体的向量

typedef Eigen::Triplet<int> Trip;
std::vector<Trip> trp;
将它们分配到稀疏特征矩阵

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

A.setFromTriplets(trp.begin(), trp.end());
int行,cols;
行=cols=1500;
本征::SparseMatrix A(行,列);
A.setFromTriplets(trp.begin(),trp.end());
打印整个(密集)矩阵


std::cout正常。如果可能的话,我想了解。为什么要按此顺序将值分配给2个三元组?我们为什么不使用3个三胞胎呢?我想我还是不明白三胞胎的结构。如何将结果可视化为Matlab的结果?An是一个简单的结构,它包含一个
i,j,v
集合。如果你想要矩阵中的32个元素,你就要创建32个三元组。如果在你的例子中,每个
i
j
v
都有一个向量,那么这里就有了转置。好的,我已经做了,但我仍然感到困惑。稀疏矩阵的目的是不存储零值。这里矩阵A存储零值。。我不知道你是否明白我的意思?
A
不存储零值。当
好的时候谢谢,我明白了。我正在尝试翻译一个matlab代码(matlab编码器不会翻译matlab的所有函数…)。如果我是Stuck我会回来的你目前对它的最佳尝试是什么?您需要提供一些自己的代码来获得修复它的帮助。看是必要的。
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;
    }
}