首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IFFT在Python中返回什么?

IFFT在Python中返回什么?
EN

Stack Overflow用户
提问于 2019-05-23 17:28:53
回答 4查看 5.1K关注 0票数 8

我需要复数组的傅里叶逆变换。ifft应该返回一个实数组,但它返回另一个复数组。

在MATLAB中,a=ifft(fft(a)),但在Python中,它不是这样工作的。

代码语言:javascript
复制
a = np.arange(6)
m = ifft(fft(a))
m # Google says m should = a, but m is complex

输出:

代码语言:javascript
复制
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])
EN

回答 4

Stack Overflow用户

发布于 2019-05-23 17:37:00

虚部是结果浮点精度数计算误差。如果它非常小,则可以将其删除。

Numpy内置了函数real_if_close,可以这样做:

代码语言:javascript
复制
>>> 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

票数 13
EN

Stack Overflow用户

发布于 2019-05-23 17:39:41

如果虚部接近于零,则可以将其丢弃:

代码语言:javascript
复制
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 answerreal_if_close在一行代码中所做的事情)。

票数 4
EN

Stack Overflow用户

发布于 2019-05-23 17:42:47

您可以像这样测试:

代码语言:javascript
复制
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)

代码语言:javascript
复制
[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]

要获得只有您可以使用的真实部分,请使用:

代码语言:javascript
复制
print(m.real) # [0. 1. 2. 3. 4. 5.]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56272143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档