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 に答える