Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: How to Scale and vary plot for a Differential Equation
  • Next by Date: Re: can one make local symbol in a pure function?
  • Previous by thread: Programmatically open palette so that PalettesMenuSettings are preserved
  • Next by thread: Re: Can anyone see a faster way to compute quantities for a pair or large matrices?