2012-03-01 14 views
0

より複雑なデータを持つ配列をEigenのベクトルまたは行列として使用することが可能かどうか疑問です。Eigenのユーザー定義構造体の配列

例:

struct data 
{ 
    /* some members...*/ 
    double numericValue; 
    /* more members...*/ 
}; 
std::vector<data*> dataset; 

はそれがnumericValueメンバーにアクセスし、計算にデータセットを使用する方法を固有に伝えることが可能ですか? マップクラスがドキュメントにありますが、必要な機能は見つかりませんでした。 アイデア

+0

あなたのコードに 'data'インスタンスが漏れていないことを望みます。ポインタメンバーを持つベクトルはしばしば悪い考えです。デバッグの目的で実行ファイルに 'valgrind --leak-check = full'を使用する方が良いでしょう。 – hochl

+0

ポインタのメンバーは本当に問題ではなく、私の場合、私はそれが最善の方法だと思っています。私がやっているのは、クアッドツリーを構築し、クアドトリー固有の演算とベクトル代数ベースの演算を行うことです。 – Smittii

答えて

1

私はあなたが正しく質問するのは分かりませんが、インタリーブされた要素を持つ構造化データを持っているため、固有演算を実行するためにベクトルまたは行列に結合したいと思います。

あなたが興味を持っているのであれば、確かにMap typeはあなたの友人です。次の式は、あなたが望む(テストされていない)ものを与えるはずです。

typedef Map<VectorXd, 0, InnerStride<sizeof(data)/sizeof(double)> > MyMap; 
MyMap map(&dataset[0].numericValue, dataset.size()); 

map *= 2.0; 

のようにして、すべてのnumericValueメンバーに2.0を掛けます。

+0

良い解決法ですが、これはポインタの配列でも機能しますか? – Smittii

+0

ああ...元の質問のそれを逃した。その場合、メモリ内のデータのレイアウトについて実際には仮定することはできません。私がそこで考えることができるのは、[カスタマイズされた型](http://eigen.tuxfamily.org/dox-devel/TopicCustomizingEigen.html)を使用してポインタによる間接参照をカバーすることだけです。しかし、このオプションが努力する価値があるかどうかを検討することができます。 – Jakob

関連する問題