Hung Dang said: (by the date of Wed, 18 Mar 2020 09:06:02 -0400) > [...] I only look from the implement perspective (\=, *=, -= , > and += operators are the same) and do not pay attention to the mathematical > meaning of the expression.
Whoa! That's surprising. I am really glad that Eigen library through the compiler errors prevents people from doing simple mathematical mistakes. best regards Janek > > 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; > >> > >> > >> > >> > >> > >> > >> > >> -- -- Janek Kozicki, PhD. DSc. Arch. Assoc. Prof. GdaĆsk University of Technology Faculty of Applied Physics and Mathematics Department of Theoretical Physics and Quantum Information -- http://yade-dem.org/ http://pg.edu.pl/jkozicki (click English flag on top right)
