[Numpy-discussion] calcul of phase (dividing by 0)

Perry Greenfield perry at stsci.edu
Thu Feb 10 06:40:51 EST 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