我如何初始化一个SparseVector在Eigen

How can I initialize a SparseVector in Eigen

本文关键字:一个 SparseVector Eigen 初始化      更新时间:2023-10-16

如何在Eigen中初始化SparseVector ?以下代码:

#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
#include <Eigen/Sparse>
using namespace Eigen;
SparseVector<float> vec(3);
main()
{
  vec(0)=1.0;
}

给出如下错误

error:调用类类型的对象,但没有适当的操作符()或指针到函数类型的转换函数vec (0) = 1.0; p

顺便说一下,vec[0]=1.0也不能用

看文档,我注意到Scalar& coeffRef(Index i),它说:

返回给定索引i处系数值的引用。此操作涉及log(rho*size)二进制查找。如果系数还不存在,则执行排序插入到顺序缓冲区中。(如果i上面的非零个数很大,这个插入可能会非常昂贵。)

所以下面的代码应该可以工作:

#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
#include <Eigen/Sparse>
using namespace Eigen;
SparseVector<float> vec(3);
main()
{
    vec.coeffRef(0)=1.0;
}

不知道为什么他们这样做,而不是使用数组重载。也许当它变成IS_STABLE时,他们会用更典型的c++方式来做?