c++ - 将特征矩阵转换为三元组形式 C++

标签 c++ matrix eigen sparse-matrix triplet

我认为 Eigen 使用压缩方法来存储稀疏矩阵。有什么方法可以从 std::vectors 中提取特征稀疏矩阵的三元组格式 vector ?

谢谢。

更多信息(三元组格式示例) 矩阵的三元组格式:

A=
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0

i = 1 1 2 3 3 4  // row
j = 1 3 3 2 4 1 // column
S = 3 4 1 2 5 4  // values

最佳答案

问题的答案是:

// Is there some method such as:

std::vector<Eigen::Triplet<double>> T = SparseMat.to_triplets();

// in Eigen?

是不是,好像没有这个功能。

相反,

std::vector<Eigen::Triplet<double>> to_triplets(Eigen::SparseMatrix<double> & M){
    std::vector<Eigen::Triplet<double>> v;
    for(int i = 0; i < M.outerSize(); i++)
        for(typename Eigen::SparseMatrix<double>::InnerIterator it(M,i); it; ++it)
            v.emplace_back(it.row(),it.col(),it.value());
    return v;
}

auto t = to_triplets(SparseMat);

如果您想更快地完成它,请在 IDE 中打开它,四处寻找指向数据数组的指针,然后编写一个对运行时没有影响的复杂函数,因为矩阵是稀疏的,并且复制是线性的就非零元素而言。

关于c++ - 将特征矩阵转换为三元组形式 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685877/

相关文章:

python - 如何将一列字符串添加到 numpy 字符串矩阵?

C++ - Fastor vs. Eigen vs C-tran : Speed differences in tensor contraction

c++ - 对于矩阵乘积的 Cholesky, Eigen 和 C++11 类型推断失败

matrix - python : Transformation Matrix

c++ - std::vector 的对齐问题

c++ - 在派生类上应用父类(super class)测试

c++ - 在 C++ 问题中比较两个字符串。

c++ - 使用 WxWidgets 异步执行

c++ - 重复重新分配后出现段错误

javascript - 将 3D 矩阵转换为可读格式