Как рассчитать транспонирование внешней матрицы с большой строкой в собственном файле

#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 — это два разных типа, и становится невозможным абстрагироваться от них, т. Е. иметь методы, принимающие в качестве аргументов безразлично один или другой.