Eigen中的SparseMatrix(稀疏矩阵)元素的快速插入 - 辰宸的备忘录 (licc.tech)
Eigen::SparseMatrix<float> m(3, 3);
std::vector<Eigen::Triplet<float> > triple;
for (int i = 0; i < 3; i ) {
for (int j = 0; j < 3; j ) {
triple.push_back(Eigen::Triplet<float>(i, j, 0.1));
}
}
triple.push_back(Eigen::Triplet<float>(1, 1, 0.1)); //相同下标重复插入,则表示相加
m.setFromTriplets(triple.begin(), triple.end());
这段代码的作用是创建一个 3x3 的稀疏矩阵 m,并将其所有元素的值设置为 0.1。具体实现如下:
定义了一个名为 m 的稀疏矩阵,大小为 3x3,元素类型为 float。
定义了一个名为 triple 的 std::vector,用于存储矩阵 m 的非零元素。
使用两个 for 循环遍历矩阵 m 的所有元素,将其行、列索引和值封装成 Triplet 类型的对象,并加入到 triple 中。
在循环外部,再加入一个 Triplet 对象,其行列索引为 (1, 1),值为 0.1。由于该位置在上面的循环中已经被赋值为 0.1,因此这里实际上是将该位置的值加上了 0.1。
调用 m 的 setFromTriplets 方法,将 triple 中的元素设置为 m 的非零元素。最终,矩阵 m 的值为:0.1 0.1 0.1
0.1 0.2 0.1
0.1 0.1 0.1