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?