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 <[email protected]>
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 <
> [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