Re: [eigen] Sign function
• To: eigen@xxxxxxxxxxxxxxxxxxx
• Subject: Re: [eigen] Sign function
• From: Carlos Becker <carlosbecker@xxxxxxxxx>
• Date: Sat, 8 Dec 2012 15:13:19 +0100
• Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=fDiTSLON/iwWBgukISEJvZGExYS0DKCWX4UukYZ68ws=; b=sQsN5X/QWv2o/7f+0I9h2CGa1SynO9iVzWRStnV3D7l/AK1QRTWoDinwC6ewPayd9R bCEQO/gSmjvX4Ab+4FuZ6qN07Cl2zLjXokAvjjxP0+J95wM+YChx4N+tdvs/lvSoO3oG 23jCv8htxmfjYhTVWvywKpPN8bmzVzP4bXXqJ0dT0oZPAAkZqnCW10DxOThfj/QONmx/ mEzekZz/z4Ai3PBMka0jSMHb3BhUY9mGUMeVZS6qu6RVZyyQx1OEWcgT3ddDNpcKOPqc Y3GvqDPe1GbDkVKAUeTrjlo1othJaavGCFTIcCGarhkNGQVZ8sJ0m7DTQIXadC1u8T0P LYfQ==

Hi Gael,

thanks!

If MatType is something 'huge' in the example you gave, would it get instantiated in memory? because then I should probably use another way of doing it.
For example, I would replace MatType::Constant(k)  with  VectorXd::Constant( N, k ), where N could be pretty large.

thanks again.

------------------------------------------
Carlos

On Sat, Dec 8, 2012 at 2:08 PM, Gael Guennebaud wrote:
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 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/