のアイゲンライブラリは既存のメモリを固有行列にマップできます。
float array[3];
Map<Vector3f>(array, 3).fill(10);
int data[4] = 1, 2, 3, 4;
Matrix2i mat2x2(data);
MatrixXi mat2x2 = Map<Matrix2i>(data);
MatrixXi mat2x2 = Map<MatrixXi>(data, 2, 2);
私の質問は、固有行列 (例: Matrix3f m) から c 配列 (例: float[] a) を取得するにはどうすればよいかということです。固有行列の実際のレイアウトは何ですか? 実際のデータは、通常の c 配列と同じように保存されますか?
ベストアンサー1
あなたはデータ()Eigen Matrix クラスのメンバー関数。デフォルトでは、レイアウトは列優先であり、多次元 C 配列としての行優先ではありません (レイアウトは Matrix オブジェクトの作成時に選択できます)。スパース行列の場合、前述の文は明らかに当てはまりません。
例:
ArrayXf v = ArrayXf::LinSpaced(11, 0.f, 10.f);
// vc is the corresponding C array. Here's how you can use it yourself:
float *vc = v.data();
cout << vc[3] << endl; // 3.0
// Or you can give it to some C api call that takes a C array:
some_c_api_call(vc, v.size());
// Be careful not to use this pointer after v goes out of scope! If
// you still need the data after this point, you must copy vc. This can
// be done using in the usual C manner, or with Eigen's Map<> class.