我需要复杂数组的傅立叶逆变换。 ifft
应该返回一个实数组,但是它返回另一个复杂数组。
在MATLAB中,a=ifft(fft(a))
,但在Python中不能那样工作。
a = np.arange(6)
m = ifft(fft(a))
m # Google says m should = a, but m is complex
输出 :
array([0.+0.00000000e+00j, 1.+3.70074342e-16j, 2.+0.00000000e+00j,
3.-5.68396583e-17j, 4.+0.00000000e+00j, 5.-3.13234683e-16j])
最佳答案
虚部是结果 float 精度数计算误差。如果很小,则可以将其丢弃。
Numpy具有内置函数 real_if_close
:
>>> np.real_if_close(np.fft.ifft(np.fft.fft(a)))
array([0., 1., 2., 3., 4., 5.])
您可以在此处阅读有关 float 系统限制的信息:
https://docs.python.org/3.8/tutorial/floatingpoint.html