为什么 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 是一维的(在每一行上),除非使用 fft2
或 fftn
。
当我注意到 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 是一维的(在每一行上),除非使用 fft2
或 fftn
。