7

如何在 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 也不起作用。

4

1 回答 1

3

查看我注意到的文档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++ 方式进行操作?

于 2011-09-22T16:28:39.840 回答