[Numpy-discussion] calcul of phase (dividing by 0)
Perry Greenfield
perry at stsci.edu
Thu Feb 10 06:40:51 CST 2005
Jean-Luc Menut wrote:
>
> I'm want to have the modulus and the phase of a fourier transform of 2D
> array, so I use the numarray FFT to compute the FT of the array (let's
> call it ff) and I use abs(ff) for the modulus and atan(ff.imag/ff.real)
> for the phase.
>
> My problem comes when ff.real = 0, I have either inf or nan as result
> (which is perfectly good and useful). I looking for a function which
> replace atan(ff.imag/ff.real) by 0 when ff.real is 0.
>
> I'm currently using a loop, and I think it's not very good (I call this
> function very often). Since the determination of the phase is something
> really useful and often used, I think there is probably a lot of people
> who had the same problem.
>
> So what solutions do you use?
>
Two basic approaches come to mind:
result = atan(ff.imag/ff.real)
result[where(ff.real == 0)] = 0.
The following is often faster (but uses more memory):
result[ff.real==0] = 0.
The first method generates a list of locations where ff.real is 0 where
the second generates a mask array where true values will be set.
Another approach is to use the functions in the module ieeespecial
to specifically change ieee special values:
import numarray.ieeespecial as ieee
ieee.setnan(result, 0.)
I hope this answers your question.
Perry Greenfield
More information about the Numpy-discussion
mailing list