2013-03-14 3 views
0

Я пытаюсь сделать транспонировать от одного MatrixX* в другое (не квадратичное, но с правильными размерами). Однако лучшее, что я смог найти, это функция Transpose<Derived> ::transpose().Транспонирование не квадратичной матрицы в другую

Есть ли даже вызов, который помещает результат в уже выделенную матрицу вместо выделения нового?

EDIT:

На самом деле я использую Eigen::Map поверх матрицы.

typedef Eigen::Matrix<std::uint8_t, Eigen::Dynamic, Eigen::Dynamic> matrix_type; 
typedef Eigen::Map<matrix_type> map_type; 

const map_type src (src_ptr , width , height); 
     map_type dest(dest_ptr, height, width ); 

map.transposeInPlace(); 

Использование transposeInPlace() запускает в Assert Derived& DenseBase<Derived> ::lazyAssign(const DenseBase<OtherDerived>& other).

+0

http://forum.kde.org/viewtopic.php?f=74&t=88932 Посмотрите эту тему, возможно, это поможет с этим утверждать. Я никогда не сталкивался с этой проблемой ... – acrilige

ответ

1

Использование Eigen::Map на вершине матрицы действительно приводит к утверждению, так как кажется, что transposeInPlace пока не подходит для Eigen::Map (AKA a bug).

К счастью для меня, используя обычный ::transpose было хорошо, поскольку Eigen использует позднее назначение данных.

2

Попробуйте использовать функцию transposeInPlace()

Вот документация: http://eigen.tuxfamily.org/dox/TutorialMatrixArithmetic.html

Для в месте транспозиции, как, например, в = a.transpose(), просто использовать transposeInPlace() функция:

MatrixXf a(2,3); a << 1, 2, 3, 4, 5, 6; 
cout << "Here is the initial matrix a:\n" << a << endl; 
a.transposeInPlace(); 
cout << "and after being transposed:\n" << a << endl; 

ОБНОВЛЕНИЕ: Как упоминалось в комментарии Zeta, объект матрицы должен быть изменен по размеру - это всегда верно для всех объектов MatrixX *.

+2

Примечание: Работа выполняется только в том случае, если '* this' является изменяемым по размеру. – Zeta

+0

@Zeta: Каковы критерии для _resizeable_? – abergmeier

+0

@LCIDFire: http://eigen.tuxfamily.org/dox/TutorialMatrixClass.html#TutorialMatrixAssignment. Тем не менее, 'dynamic' матрицы изменяются по умолчанию, если вы используете только« MatrixX », а не один из постоянных размеров времени компиляции, вы не должны получать какую-либо матрицу без изменения размера. – Zeta

Смежные вопросы