|Re: [eigen] in-place transpose|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
Oops! Sure, Part didn't have swap(). Thanks for having added it.
It was pretty bad that Part didn't use copyCoeff, good that you fixed it.
On Wednesday 29 October 2008 16:26:22 Gael Guennebaud wrote:
> 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.
> > 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.
> > ---