Re: [eigen] Vector's -= operator does not seem to work

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


Hi Janos, Everton, and Adrien,

Thank you very much for your suggestions especially Adrien's explanations are very helpful. I only look from the implement perspective (\=, *=, -= , and += operators are the same) and do not pay attention to the mathematical meaning of the _expression_. 

Best,
Hung

On Tue, Mar 17, 2020 at 10:53 PM Adrien Escande <adrien.escande@xxxxxxxxx> wrote:
Hello,

this is not working, because you are trying to subtract two elements that are different in nature: a vector and a scalar. From a mathematical point of view, it doesn't make sense.
By doing v -=2 I assume you are trying to subtract 2 from every component of v. Some software like matlab offer a *shorcut* in the form v - 2, but Eigen doesn't (at least not directly).
There are at least two ways to achieve what you want:
 * v -= Vector3d::Constant(2), that is you express in a proper mathematical way what you want
 * going into array world as Janos suggested: v.array() -= 2;

Note that v *= 2 works because it is mathematically valid to multiply a vector or matrix by a scalar..

Best regards,
Adrien Escande

On Wed, Mar 18, 2020 at 10:04 AM Everton Rufino Constantino1 <everton.constantino@xxxxxxx> wrote:
Looking at VectorwiseOp.h there is an -= operator implemented...
What kind of error are you seeing exactly?
 
Everton Constantino
Software Developer
Application Libraries Optimisation
Linux Technology Center, IBM Systems
e-mail: everton.constantino@xxxxxxx
 
 
 
----- Original message -----
From: Janos Meny <janos.meny@xxxxxxxxxxxxxx>
To: eigen@xxxxxxxxxxxxxxxxxxx
Cc:
Subject: [EXTERNAL] Re: [eigen] Vector's -= operator does not seem to work
Date: Tue, Mar 17, 2020 21:56
 
How about using v.array() -= 2; ?
 
On Wed 18. Mar 2020 at 01:53, Hung Dang <hungptit@xxxxxxxxx> wrote:
Hi,

I try some Eigen examples (see below) and the -= operator is not
supported. Is there any way to make it work without creating a constant
vector?

Thank a lot,

Hung

     Matrix2d a;
     a << 1, 2, 3, 4;
     Vector3d v(1, 2, 3);
     std::cout << "a * 2.5 =\n" << a * 2.5 << std::endl;
     std::cout << "0.1 * v =\n" << 0.1 * v << std::endl;
     std::cout << "Doing v *= 2;" << std::endl;

     v *= 2;
     std::cout << "Now v =\n" << v << std::endl;

     // Does not work
     // v -= 2;
     // std::cout << "Now v =\n" << v << std::endl;



 
 



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