如何在 MATLAB 和 Python 中为 fft2() 获得相同的结果?
How can I get same results for fft2() in MATLAB and Python?
我正在将 MATLAB 代码转换为 Python 代码,但我从 numpy fft2()
和 MATLAB fft2()
得到了不同的结果。差别不小。我怎样才能得到相同的结果?
其中 S
是 (10,10,3)
数组
在Python中:
Normin1 = fft2(S)
print("Normin is\n",Normin1[:,:,0])
Output(Just first row):
Normin is
[[ 1.29098039e+01+0.00000000e+00j
-8.14368936e-01-4.02146547e-01j
4.57184468e-01+4.59545965e-01j
2.37898348e-01-1.58643666e-01j
-6.89491738e-02+1.65467814e-01j
3.29411765e-01-1.38777878e-17j
-6.89491738e-02-1.65467814e-01j
2.37898348e-01+1.58643666e-01j
4.57184468e-01-4.59545965e-01j
-8.14368936e-01+4.02146547e-01j]
但是在 MATLAB 中:
Normin1 = fft2(S);
Output of first row
44.27451 + 0.00000i
-1.04275 - 3.36765i
0.72446 - 1.92128i
0.02706 + 0.09694i
0.70692 + 0.28154i
-0.90980 + 0.00000i
0.70692 - 0.28154i
0.02706 - 0.09694i
0.72446 + 1.92128i
-1.04275 + 3.36765i
我解决了我的问题。 Python 按行进行数组操作。相反,Matlab/Octave 按列进行数组操作。这就是为什么,它应该如下得到相同的结果,
MATLAB 代码:
Normin1 = fft2(S);
Python相当于:
Normin1 = np.fft2(S.T).T
我正在将 MATLAB 代码转换为 Python 代码,但我从 numpy fft2()
和 MATLAB fft2()
得到了不同的结果。差别不小。我怎样才能得到相同的结果?
其中 S
是 (10,10,3)
数组
在Python中:
Normin1 = fft2(S)
print("Normin is\n",Normin1[:,:,0])
Output(Just first row):
Normin is
[[ 1.29098039e+01+0.00000000e+00j
-8.14368936e-01-4.02146547e-01j
4.57184468e-01+4.59545965e-01j
2.37898348e-01-1.58643666e-01j
-6.89491738e-02+1.65467814e-01j
3.29411765e-01-1.38777878e-17j
-6.89491738e-02-1.65467814e-01j
2.37898348e-01+1.58643666e-01j
4.57184468e-01-4.59545965e-01j
-8.14368936e-01+4.02146547e-01j]
但是在 MATLAB 中:
Normin1 = fft2(S);
Output of first row
44.27451 + 0.00000i
-1.04275 - 3.36765i
0.72446 - 1.92128i
0.02706 + 0.09694i
0.70692 + 0.28154i
-0.90980 + 0.00000i
0.70692 - 0.28154i
0.02706 - 0.09694i
0.72446 + 1.92128i
-1.04275 + 3.36765i
我解决了我的问题。 Python 按行进行数组操作。相反,Matlab/Octave 按列进行数组操作。这就是为什么,它应该如下得到相同的结果,
MATLAB 代码:
Normin1 = fft2(S);
Python相当于:
Normin1 = np.fft2(S.T).T