Eigen中的SparseMatrix(稀疏矩阵)元素的快速插入

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。具体实现如下:

  1. 定义了一个名为 m 的稀疏矩阵,大小为 3x3,元素类型为 float。

  1. 定义了一个名为 triple 的 std::vector,用于存储矩阵 m 的非零元素。

  1. 使用两个 for 循环遍历矩阵 m 的所有元素,将其行、列索引和值封装成 Triplet 类型的对象,并加入到 triple 中。

  1. 在循环外部,再加入一个 Triplet 对象,其行列索引为 (1, 1),值为 0.1。由于该位置在上面的循环中已经被赋值为 0.1,因此这里实际上是将该位置的值加上了 0.1。

  1. 调用 m 的 setFromTriplets 方法,将 triple 中的元素设置为 m 的非零元素。最终,矩阵 m 的值为:0.1 0.1 0.1

0.1 0.2 0.1

0.1 0.1 0.1

猜你喜欢

转载自blog.csdn.net/m0_67357141/article/details/129731203