为什么 R 和 Python FFT 给出不同的结果?

Why do the R and Python FFT give different results?

当我注意到 R 和 Python 的 FFT 之间的差异时,我正在 运行 进行一个简单的实验。

首先,Python:

import numpy as np
from pyfftw.interfaces.numpy_fft import fft
a = np.array([1, 2, 3])
fft(a)
>> array([ 6. +0.j       , -1.5+0.8660254j, -1.5-0.8660254j])

b = np.array([[1, 2, 3], [4, 5, 6]])
fft(b)
>> array([[ 6. +0.j       , -1.5+0.8660254j, -1.5-0.8660254j],
       [15. +0.j       , -1.5+0.8660254j, -1.5-0.8660254j]])```

现在R:

> a = c(1, 2, 3)
> fft(a)
[1]  6.0+0.000000i -1.5+0.866025i -1.5-0.866025i

> b = rbind(c(1, 2, 3), c(4, 5, 6))
> fft(b)
      [,1]         [,2]         [,3]
[1,] 21+0i -3+1.732051i -3-1.732051i
[2,] -9+0i  0+0.000000i  0+0.000000i

我注意到 R 结果的第一行对应于 Python 结果的第一行和第二行的逐元素总和,而 R 结果的第二行对应于减法。

我做错了什么?我 运行 使用 np.matrix 和 R 矩阵进行相同的实验,但得到相同的结果。将 FFT 应用于矩阵或多维数组时,哪一个应该是正确的结果?

根据评论中的建议,我做了以下事情:

from pyfftw.interfaces.numpy_fft import fftn
b = np.array([[1, 2, 3], [4, 5, 6]])
fftn(b)                                                                                                                                                                                              
>> array([[21.+0.j        , -3.+1.73205081j, -3.-1.73205081j],
          [-9.+0.j        ,  0.+0.j        ,  0.+0.j        ]])

也适用于 fft2

的确,Python FFT 是一维的(在每一行上),除非使用 fft2fftn