#eigen
#eigen
Вопрос:
Имея внешнюю матрицу с большой строкой A (m x n) и уже создав внешнюю матрицу с большой строкой B (n x m) для результата, для получения транспонирования я делаю:
Map<MatrixXd,RowMajor> (B,n,m) = Map<MatrixXd,RowMajor> (A,m,n).transpose()
где A и B указывают на буферы данных. Это отлично работает в случае больших матриц по умолчанию, но для матриц с большой строкой результат верен только для m == n, для m <> n числа искажены вверх. Я неправильно интерпретирую, как отобразить внешние данные row-major?
Ответ №1:
Второй аргумент шаблона Map
предназначен для управления выравниванием. Макет с большой строкой должен быть указан через тип матрицы:
typedef Matrix<double,Dynamic,Dynamic,RowMajor> RowMajorMatrixXd;
Map<RowMajorMatrixXd>(B,n,m) = Map<RowMajorMatrixXd>(A,m,n).transpose()
Комментарии:
1. Я пробовал это, и это работает, вы ответили на мой вопрос.
2. К сожалению, таким образом, RowMajorMatrixXd и MatrixXd — это два разных типа, и становится невозможным абстрагироваться от них, т. Е. иметь методы, принимающие в качестве аргументов безразлично один или другой.