Can anyone see a faster way to compute quantities for a pair or large matrices?
- To: mathgroup at smc.vnet.net
- Subject: [mg127412] Can anyone see a faster way to compute quantities for a pair or large matrices?
- From: W Craig Carter <ccarter at MIT.EDU>
- Date: Mon, 23 Jul 2012 01:03:32 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
Hello,
I am computing the gradient on a grid, then computing the gradient's
angle, and its magnitude. The computations below are the bottleneck for
a longer bit of code. I would be grateful for any insights on how to
speed these up.
(*
Let gradfield be the gradient that I have computed and placed in two matrices. Here I will just use random numbers as a proxy:
*)
(*i.e., df/dx, df/dy*)
gradfield = { RandomReal[{-1, 1}, {256, 256}], RandomReal[{-1, 1}, {256, 256}]};
(*my gradients has many zeroes, so I need to handle these*)
SetAttributes[myArcTan, {Listable, NumericFunction}];
myArcTan[0.0, 0.0] = 0.0;
myArcTan[x_, y_] := ArcTan[x, y]
(*the angles, this is slow*)
psiField = MapThread[myArcTan, gradfield, 2];
(*the magnitudes, this is slower*)
magfield = MapThread[Norm[{#}] &, gradfield, 2];
(*examples*)
Do[psiField = MapThread[myArcTan, gradfield, 2], {100}] // Timing
Do[magfield = MapThread[Norm[{#}] &, gradfield, 2], {100}] // Timing
W Craig Carter
Professor of Materials Science, MIT
- Follow-Ups:
- Re: Can anyone see a faster way to compute quantities for a pair or large matrices?
- From: Sseziwa Mukasa <mukasa@gmail.com>
- Re: Can anyone see a faster way to compute quantities for a pair or large matrices?