Отображение основного массива строк в собственную матрицу столбцов


Я хочу сопоставить массив C-типа со Столбцовой собственной матрицей.

Само отображение использует тип RowMajor,

Поэтому я попробовал

std::vector<double> a(9);
double *p= a.data();
Eigen::MatrixXd M=Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::RowMajor>>(p)

Я получил то, что ожидал(порядок M. data ()), однако, если размерность(3) в шаблоне не известна во время компиляции, этот метод не работает... есть решение?

1 2

1 ответ:

Я предполагаю, что вы написали:

Eigen::MatrixXd M=Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(p);
Это не позволяет карте знать, какими должны быть размеры. Вы должны добавить это в конструктор:
std::vector<double> a{1,2,3,4,5,6,7,8,9};
double *p = a.data();
std::cout << Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::RowMajor>>(p) << "\n\n";
std::cout << Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(p, 3, 3) << "\n\n";

std::cout << Eigen::Map<Eigen::Matrix<double, 3, 3, Eigen::ColMajor>>(p) << "\n\n";
std::cout << Eigen::Map<Eigen::MatrixXd>(p, 3, 3) << "\n\n";