72 votes

Convertir la matrice propre en tableau C

En Eigen permet de transformer une mémoire existante en matrices Eigen.

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);

Ma question est la suivante : comment obtenir un tableau c (par exemple float[] a) à partir d'une matrice propre (par exemple Matrix3f m) ? Quelle est la disposition réelle de la matrice propre ? Les données réelles sont-elles stockées comme dans un tableau c normal ?

1 votes

Ce ne sont pas des types de données standard. Est-ce que "Eigen" est le nom de la bibliothèque, ou une référence aux fondements mathématiques ? Dans ce dernier cas, de quelle bibliothèque proviennent les types ? De plus, le C n'a pas de modèles de types. Puisque les matrices sont bidimensionnelles, que voulez-vous exactement dans le tableau ordinaire ? Une ligne ou une colonne particulière, ou la matrice entière remodelée à une dimension ?

0 votes

@outis Eigen fait référence à un bibliothèque .

0 votes

@ChristianRau : c'est possible, mais je veux être absolument sûr que c'est bien à cela que Lil fait référence.

0voto

J'ai essayé ceci : passer l'adresse de l'élément à (0,0) et itérer vers l'avant.

Eigen::Matrix<double, 3, 8> coordinates3d;
coordinates3d <<    0.0,  0.0,  1.0,  1.0,  0.0,  0.0,  1.0,  1.0,
                    0.0,  1.0,  1.0,  0.0,  0.0,  1.0,  1.0,  0.0,
                    1.0,  1.0,  1.0,  1.0,  0.0,  0.0,  0.0,  0.0;
double *p = &coordinates3d(0,0);
std::vector<double> x2y2;
x2y2.assign(p, p + coordinates3d.size());

for(int i=0;i < coordinates3d.size(); i++) {
    std::cout <<x2y2[i];
}

Voici la sortie : 001011111101000010110100 Il semble que les données soient stockées en rangs principaux.

-6voto

user3097951 Points 1
ComplexEigenSolver < MyMatrix > es;
complex<double> *eseig;
es.compute(H);
es.eigenvalues().transpose();
eseig=(complex<double> *)es.eigenvalues().data();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X