No estoy seguro de lo que quiere, pero intentaré explicarlo.
Está mezclando dobles y flotantes en su código (un MatrixXf es una matriz donde cada entrada es un flotante). Asumiré por el momento que esto no fue intencional y que desea usar el doble en todas partes; ver a continuación para si esta era realmente su intención.
La instrucción Map<MatrixXd>(arrayd, n, n) = matrix
copia las entradas de matrix
en arrayd
. Es equivalente al bucle
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
Para copiar las entradas de arrayd
en matrix
, utilizaría la asignación inversa: matrix = Map<MatrixXd>(arrayd, n, n)
.
Sin embargo, por lo general la siguiente técnica es más útil:
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
puntos Ahora arrayd a las entradas de la matriz y se puede procesar como cualquier matriz C++. Los datos se comparten entre matrix
y arrayd
, por lo que no tiene que copiar nada al final. Por cierto, no necesita pasar n
a la función foo()
, porque está almacenado en la matriz; use matrix.rows() y matrix.cols() para consultar su valor.
Si desea copiar un MatrixXf en una matriz de dobles, debe incluir el yeso explícitamente. La sintaxis en Eigen para esto es: Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
.
¿Qué es esta función Map <>? ¿Puedes mostrarlo? –
Eso es todo lo que sé http://eigen.tuxfamily.org/dox/TutorialMapClass.html – Manolete