如何在Eigen中初始化SparseVector

时间:2011-09-22 15:26:14

标签: 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;
}

给我以下错误

  

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

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

1 个答案:

答案 0 :(得分: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;
}

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