Re: [eigen] vector-cwise operator +=/-= |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] vector-cwise operator +=/-=*From*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>*Date*: Wed, 16 Dec 2009 10:44:08 +0100*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=xk/LI6sl1kxPV/HGakyKCIl4W/I27oOoVAqcvNQwtvY=; b=f7wD8lIJtoQkSi6vN9JUcgapiXg66EwY+vKIFBDKu9+RgkOVP9UVvTklMn1YWzJwzs ILjK57UWQc4eLjZcp4oqMvMEi494odtZiAt633Qj4T7aQsCrdE9p1LICgc0eWgQU/ki7 iLreU0Ot8RnATLejzhmxogT74z25KIF8eg2Os=*Domainkey-signature*: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=iciMD3LQNvxtfumuRYEvGNJfgwgCskFA+poal93waiWVNJLSP5FYeIVh92cc0vHk4N jde+CUFKz01DeEJZ7UgjH3IgJ+eOaZ/sCEw8Vz6Y72JLqhhFM+QVC8hG1i9GHTQ/MhIl N2quC36ng2YD50K7Ve+YzAU1dJPMxui7mXVcY=

On Wed, Dec 16, 2009 at 10:14 AM, Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx> wrote:

yes, transpose is always a null op.

let's see what others think. Maybe a compromise would be to allow automatic transpose for operators += and -= (to be consistent with operator=) but not for non assigning operators (+, -, cwise*, cwiseMin, cwiseMax, etc.).

but what about:

MatrixXf a(5,2), b(6,4);

a + b;

This requires a runtime ei_assert.

gael

So the transposition is really not (!) taking place - it's optimized away? Is there a general rule of thumb to infer, when and if transposition is a nullary op?

yes, transpose is always a null op.

Regarding the convenience I would say 'yes, it's more convenient'. In particular in presence of my previous question - it is (*cough* at least for me) not intuitively clear to the user that the multiplication as proposed by you is equally efficient.

let's see what others think. Maybe a compromise would be to allow automatic transpose for operators += and -= (to be consistent with operator=) but not for non assigning operators (+, -, cwise*, cwiseMin, cwiseMax, etc.).

Finally, in the patch I am guarding against vectors of different size. I can not guarantee, that I am overseeing a use case where this might fail. I can run the unit tests against the modifications and true, I see the need for the ei_assert...

but what about:

MatrixXf a(5,2), b(6,4);

a + b;

This requires a runtime ei_assert.

gael

- HaukeOn Wed, Dec 16, 2009 at 10:05 AM, Gael Guennebaud <gael.guennebaud@xxxxxxxxx> wrote:

indeed we already allow col_vector = row_vector, but I'm not sure we should allow coeff-wise binary operators to work between column and row vectors... is it always safe ? is it really more convenient ?

About the last question, e.g., your example is better written like this:

v3 += m.transpose() * v2;

gaelOn Wed, Dec 16, 2009 at 9:39 AM, Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx> wrote:

Hi guys,

I think it would be cool, if the following code worked:

#include <Eigen/Core>

#include <Eigen/Array>

using namespace Eigen;

void main ()

{

Matrix<double,3,1> v3;

Matrix<double,2,1> v2;

Matrix<double,2,3> m;

m << 1,2,3,4,5,6;

v2 << 7,8;

v3 << 4,5,6;

v3 += v2.transpose() * m; // expected 43, 59, 57

std::cout << v3 << std::endl;

}

The simple assignment

v3 = v2.transpose() * m;

is already working and if I am not totally wrong, the only thing which keeps this current example from working is the ctor of CwiseBinaryOp. In particular the lines

EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs)

ei_assert(lhs.rows() == rhs.rows() && lhs.cols() == rhs.cols());

(these are redundant, right?). I think, if we simply make this check less restrictive in the sense that we allow the assignment of vectors and their transposed counterparts (having the same size...) we would be done. Any objections or comments against such a change?

- Hauke

**Follow-Ups**:**Re: [eigen] vector-cwise operator +=/-=***From:*Hauke Heibel

**Re: [eigen] vector-cwise operator +=/-=***From:*Hauke Heibel

**References**:**[eigen] vector-cwise operator +=/-=***From:*Hauke Heibel

**Re: [eigen] vector-cwise operator +=/-=***From:*Gael Guennebaud

**Re: [eigen] vector-cwise operator +=/-=***From:*Hauke Heibel

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] vector-cwise operator +=/-=** - Next by Date:
**Re: [eigen] vector-cwise operator +=/-=** - Previous by thread:
**Re: [eigen] vector-cwise operator +=/-=** - Next by thread:
**Re: [eigen] vector-cwise operator +=/-=**

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