Si le tableau est bidimensionnel, il faut faire attention à l'ordre de stockage. Par défaut, Eigen stocke les matrices dans l'ordre colonne-majeur. Cependant, un ordre de rangée majeure est nécessaire pour la conversion directe d'un tableau en une matrice Eigen. Si de telles conversions sont effectuées fréquemment dans le code, il peut être utile d'utiliser un ordre de stockage correspondant. typedef
.
using namespace Eigen;
typedef Matrix<int, Dynamic, Dynamic, RowMajor> RowMatrixXi;
Avec une telle définition, on peut obtenir une matrice propre à partir d'un tableau d'une manière simple et compacte, tout en préservant l'ordre du tableau original.
Du tableau C à Eigen::Matrix
int nrow = 2, ncol = 3;
int arr[nrow][ncol] = { {1 ,2, 3}, {4, 5, 6} };
Map<RowMatrixXi> eig(&arr[0][0], nrow, ncol);
std::cout << "Eigen matrix:\n" << eig << std::endl;
// Eigen matrix:
// 1 2 3
// 4 5 6
Dans le sens inverse, les éléments d'une matrice propre peuvent être transférés directement dans un tableau de style C en utilisant Map
.
De Eigen::Matrix à un tableau C
int arr2[nrow][ncol];
Map<RowMatrixXi>(&arr2[0][0], nrow, ncol) = eig;
std::cout << "C array:\n";
for (int i = 0; i < nrow; ++i) {
for (int j = 0; j < ncol; ++j) {
std::cout << arr2[i][j] << " ";
}
std::cout << "\n";
}
// C array:
// 1 2 3
// 4 5 6
Notez que dans ce cas, la matrice originale eig
n'a pas besoin d'être stocké dans une structure à rangée majeure. Il suffit de spécifier l'ordre des rangées dans le fichier Map
.
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.
0 votes
@ChristianRau oui, je me réfère à eigen.tuxfamily.org