Re: Can anyone see a faster way to compute quantities for a pair or
- To: mathgroup at smc.vnet.net
- Subject: [mg127441] Re: Can anyone see a faster way to compute quantities for a pair or
- From: W Craig Carter <ccarter at MIT.EDU>
- Date: Wed, 25 Jul 2012 02:32:35 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <juim0j$k9a$1@smc.vnet.net> <20120724081538.B3AF16802@smc.vnet.net>
Thanks to Ray, Dan, Sseziwa, Andre, and David Park (offline response)
for their suggestions which improve computation time by about a factor
of 100.
I am very curious what is going on under the hood that makes my original
method (pasted again below) using MapThread so inefficient compared to
the better solutions (i.e., using Apply and Map solutions not the
Compile solution). This seems a good learning--and
teaching--opportunity.
(*original posting, the myArcTan is not the real culprit (btw, I am very
impressed with Ray's UnitStep trick*)
(* original inefficient posted method*)
gradfield = { RandomReal[{-1, 1}, {256, 256}], RandomReal[{-1, 1},
{256, 256}]};
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];
>
> psifield2 = ArcTan@@{gradfield[[1]] + UnitStep[-magfield2],
> gradfield[[2]]}
- Follow-Ups:
- Re: Can anyone see a faster way to compute quantities for a pair or
- From: Sseziwa Mukasa <mukasa@gmail.com>
- Re: Can anyone see a faster way to compute quantities for a pair or
- References:
- Re: Can anyone see a faster way to compute quantities for a pair or
- From: Ray Koopman <koopman@sfu.ca>
- Re: Can anyone see a faster way to compute quantities for a pair or