【问题标题】:Wrong ifft in numpynumpy中的错误iff​​t
【发布时间】:2021-01-24 03:06:35
【问题描述】:

我有一个叫做 a: 的二维数组

[2.1814 + 0.0000i   1.1375 + 0.0000i   0.2506 + 0.0000i   0.2506 + 0.0000i   1.1375 + 0.0000i]
[-2.1719 + 0.2033i  -1.1326 + 0.1060i  -0.2496 + 0.0234i  -0.2496 + 0.0234i  -1.1326 + 0.1060i]
[2.0884 + 0.6302i   1.0890 + 0.3286i   0.2400 + 0.0724i   0.2400 + 0.0724i   1.0890 + 0.3286i]
[1.8018 + 1.2295i   0.9396 + 0.6412i   0.2070 + 0.1413i   0.2070 + 0.1413i   0.9396 + 0.6412i]

当我在 matlab 中运行 ifft(a) 时,它给了我这个答案:

[0.9749 + 0.5158i   0.5084 + 0.2690i   0.1120 + 0.0593i   0.1120 + 0.0593i   0.5084 + 0.2690i]
[0.2798 - 1.1510i   0.1459 - 0.6002i   0.0322 - 0.1323i   0.0322 - 0.1323i   0.1459 - 0.6002i]
[1.1599 - 0.2007i   0.6049 - 0.1046i   0.1333 - 0.0231i   0.1333 - 0.0231i   0.6049 - 0.1046i]
[-0.2333 + 0.8359i  -0.1217 + 0.4359i  -0.0268 + 0.0960i  -0.0268 + 0.0960i  -0.1217 + 0.4359i]

当我在 python 中运行 np.fft.ifft2(a) 时,它给了我这个答案

[[ 0.44314676+0.23444054j  0.22157338+0.11722027j  0.04431468+0.02344405j 0.04431468+0.02344405j  0.22157338+0.11722027j]
 [ 0.12718937-0.52317671j  0.06359468-0.26158836j  0.01271894-0.05231767j 0.01271894-0.05231767j  0.06359468-0.26158836j]
 [ 0.52724743-0.09120678j  0.26362372-0.04560339j  0.05272474-0.00912068j 0.05272474-0.00912068j  0.26362372-0.04560339j]
 [-0.10604754+0.37994295j -0.05302377+0.18997148j -0.01060475+0.0379943j -0.01060475+0.0379943j  -0.05302377+0.18997148j]]

为什么不一样?如何让 python 和 matlab 都给我相同的答案?

【问题讨论】:

  • 请阅读minimal reproducible example。如果下面的答案不能解决您的问题,我们无法确定您做了什么,因此无法指出您做错了什么。

标签: python matlab numpy fft


【解决方案1】:

这是因为你应该在 MATLAB 中使用 ifft2,或者在 numpy 中使用 np.fft.ifft。

ifft2 是二维的离散傅里叶逆变换,ifft 是一维的。这是两种不同的算法,它们会导致不同的答案。

【讨论】:

  • 我也尝试使用 np.fft.ifft 并且输出仍然与 matlab 的 ifft 输出不同。根据我的测试,Numpy 中的 fft、fft2 和 fftn 等价于 Matlab 的 fft。然而,当涉及到快速傅立叶逆变换时,Numpy 的函数 ifft、ifft2 和 ifftn 都不会产生与 matlab 的 ifft 相同的输出
  • Python 中的 @rodrigomachado fft、fft2 和 fftn 等价于 MATLAB 中的同名函数。 MATLAB 的 fft 绝不等同于 Python 的 fft2 或 fftn。
  • @rodrigomachado 我也对其进行了测试,发现 ifft 和 np.fft.ifft 给出了几乎相同的输出。也许你的测试代码出了点问题。
【解决方案2】:

我意识到在fft函数中默认axis = -1,当我输入axis = 0时,代码生成的值与matlab相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多