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 <
[email protected]> 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: [email protected]
>
>
>
>
> ----- Original message -----
> From: Janos Meny <[email protected]>
> To: [email protected]
> 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 <[email protected]> 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;
>
>
>
>
>
>
>
>

Reply via email to