Re: [eigen] Sign function

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


You can do something like:

A += (B.array()>0)..select(MatType::Constant(k),-k);

Unfortunately the following cannot work because we have to know the matrix type returned by select from at least one of its arguments:

A += (B.array()>0).select(k,-k);

You can also use B.unaryExpr(std::ptr_fun(sign)) to reproduce "sign(B)".

gael


On Sat, Dec 8, 2012 at 12:26 PM, Carlos Becker <carlosbecker@xxxxxxxxx> wrote:
Hello everyone,

I am wondering which would be the fast way to compute the sign of every element in a vector or matrix, since I have to do the following element-wise:

A = A + k * sign(B)

where A and B are double matrices and k is a scalar.

I was trying to find some information in the docs but so far I didn't succeed.
I know I can do a boolean operation and then cast to double, multiply by 2 and subtract 1, but that doesn't seem very efficient.

Maybe some kind of custom element-wise processing, since it would be enough to compute the sign and then add k or -k to each element of A ?


Thanks!



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