我正在尝试重新实现一个matlab工具箱。 他们在那边用快速傅立叶变换。 当我对相同的数据执行相同的操作时,我得到的结果与来自matlab的不同。 看看:
MATLAB:
Msig =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
fft(Msig.')
Columns 1 through 4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Columns 5 through 6
1.0000 0
0 - 1.0000i 0
-1.0000 0
0 + 1.0000i 0
Python:
Msig=
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 0., 0.]])
np.fft.fft(Msig.transpose())
array([[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j],
[ 1.0 +0.00000000e+00j, -0.5 +8.66025404e-01j,
-0.5 -8.66025404e-01j, 1.0 -3.88578059e-16j,
-0.5 +8.66025404e-01j, -0.5 -8.66025404e-01j],
[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j],
[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j]])
如果我把np.fft.fft()/np.fft.fft2()/np.fft.fftn()的参数(轴等)弄乱,我能得到的最好结果是相同的值,但有移位。不幸的是,手动移位不是一个选项,因为Msig矩阵的大小和形状因输入参数而异。
你知道怎么解决这个问题吗,原因是什么?
Matlab在矩阵的列上应用fft,默认情况下,numpy在最后一个轴(行)上应用fft。你想要:
或者
相关问题 更多 >
编程相关推荐