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>