gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:34 25 4
gpt4 key购买 nike

我认为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com