我正在尝试重新实现matlab工具箱之一。他们在那边使用fft。当我对相同的数据执行相同的操作时,我得到的结果与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应用到最后一个轴(行)上。你要:
>>> np.fft.fft(Msig.T, axis=0) array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]])
要么
>>> np.fft.fft(Msig).T array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]])