Re: [eigen] in-place transpose

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


On Wed, Oct 29, 2008 at 12:28 PM,  <jacob@xxxxxxxxxxxxxxx> wrote:
> OK for the idea, and the name sounds good to me.
>
> For now, in the case of a square matrix, I think we can already do quickly
> an implementation that avoids the temporary and that will leverage whatever
> optimizations we implement for triangular matrices:
>
> m.template part<StrictlyUpper>()
>  .swap(
>   m.transpose().template part<StrictlyUpper>()
>  );

thanks for the trick, but it did not work right away. For the record,
I had to overload Part::swap to "swap" the nested expressions and then
update Part to use copyCoeff.

all done in rev 877452.

gael.


> Cheers,
> Benoit
>
> Gael Guennebaud <gael.guennebaud@xxxxxxxxx> a écrit :
>
>> Hi all,
>>
>> even though the transposition in eigen is in most cases a free
>> operation, sometime we really want to transpose the elements of a
>> matrix. In that case we have to carefully write:
>>
>> m.set(m.transpose().eval());
>>
>> and if the matrix is square, we can also do:
>>
>> m = m.transpose().eval();
>>
>> So the first remark is that I'm pretty sure that most people will
>> forget to add the .eval() leading to hard to find bugs.  Secondly this
>> is quite inefficient because it generates a useless copy to a
>> temporary. So what about adding a "transposeInPlace()" function ?
>> Currently we can simply define it using a temporary and optimize it
>> later with tricky algorithms for rectangular matrices:
>> http://en.wikipedia.org/wiki/In-place_matrix_transposition.
>>
>> ok ? any better idea for the function name ?
>>
>>
>> gael.
>>
>> ---
>>
>>
>
>
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>
>
> ---
>
>


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/