私はあなたが何を望んでいるかわかりませんが、私は説明しようとします。
あなたのコードにはdoubleとfloatが混在しています(MatrixXfはすべてのエントリがfloat型の行列です)。私は間違いなくあなたがどこにいてもダブルを使いたいと思っていると思います。これが本当にあなたの意図であったかどうかについては、以下を参照してください。
命令Map<MatrixXd>(arrayd, n, n) = matrix
は、matrix
のエントリをarrayd
にコピーします。 matrix = Map<MatrixXd>(arrayd, n, n)
:それはmatrix
にarrayd
のエントリをコピーするには、ループ
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
に相当し、あなたは逆の割り当てを使用します。マトリックス内のエントリに
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
今arraydポイントとあなたは任意のC++の配列として処理することができます
はしかし、通常、次の技術がより有用です。データは
matrix
と
arrayd
の間で共有されるため、最後に何もコピーする必要はありません。ちなみに、
n
を関数
foo()
に渡す必要はありません。マトリックスに格納されているためです。 matrix.rows()とmatrix.cols()を使用してその値を問い合わせます。
MatrixXfを2倍の配列にコピーする場合は、明示的にキャストを含める必要があります。このためのEigenの構文は、Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
です。
このマップの機能は何ですか?それを見せてもらえますか? –
それは私が知っているすべてです。http://eigen.tuxfamily.org/dox/TutorialMapClass.html – Manolete