我需要复数组的傅里叶逆变换。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])发布于 2019-05-23 17:37:00
虚部是结果浮点精度数计算误差。如果它非常小,则可以将其删除。
Numpy内置了函数real_if_close,可以这样做:
>>> np.real_if_close(np.fft.ifft(np.fft.fft(a)))
array([0., 1., 2., 3., 4., 5.])您可以在此处阅读有关浮动系统限制的内容:https://docs.python.org/3.8/tutorial/floatingpoint.html
发布于 2019-05-23 17:39:41
如果虚部接近于零,则可以将其丢弃:
import numpy as np
arr = np.array(
[
0.0 + 0.00000000e00j,
1.0 + 3.70074342e-16j,
2.0 + 0.00000000e00j,
3.0 - 5.68396583e-17j,
4.0 + 0.00000000e00j,
5.0 - 3.13234683e-16j,
]
)
if all(np.isclose(arr.imag, 0)):
arr = arr.real
# [ 0. 1. 2. 3. 4. 5.](这就是R2RT's answer中real_if_close在一行代码中所做的事情)。
发布于 2019-05-23 17:42:47
您可以像这样测试:
import numpy as np
from numpy import fft
a = np.arange(6)
print(a)
f = np.fft.fft(a)
print(f)
m = np.fft.ifft(f)
print(m)[0 1 2 3 4 5]
[15.+0.j -3.+5.19615242j -3.+1.73205081j -3.+0.j
-3.-1.73205081j -3.-5.19615242j]
[0.+0.j 1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j]要获得只有您可以使用的真实部分,请使用:
print(m.real) # [0. 1. 2. 3. 4. 5.]https://stackoverflow.com/questions/56272143
复制相似问题