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; > > > > > > > >
