Как я могу инициализировать SparseVector в Eigen - PullRequest
7 голосов
/ 22 сентября 2011

Как я могу инициализировать SparseVector в Eigen? Следующий код:

#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;
}

дает мне следующую ошибку

ошибка: вызов объекта типа класса без соответствующего оператора () или функций преобразования в указатель на тип функции VEC (0) = 1,0;

кстати, vec [0] = 1.0 тоже не работает.

1 Ответ

4 голосов
/ 22 сентября 2011

Глядя на документацию, я заметил Scalar& coeffRef(Index i), и там написано:

Возвращает ссылку на значение коэффициента по данному индексу i.Эта операция включает бинарный поиск в журнале (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 ++?

...