如何在Eigen中初始化SparseVector

Tar*_*rek 7 c++ eigen

如何在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;
}
Run Code Online (Sandbox Code Playgroud)

给我以下错误

错误:调用类类型的对象而没有适当的operator()或转换函数到指针到函数类型vec(0)= 1.0;

顺便说一句,vec [0] = 1.0也不起作用.

Hos*_*ork 4

查看我注意到的文档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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为他们想让用户意识到一项可能代价高昂的操作。 (3认同)