Chr*_*ris 13 python matlab numpy fft scipy
我正在尝试重新实现其中一个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
Run Code Online (Sandbox Code Playgroud)
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]])
Run Code Online (Sandbox Code Playgroud)
如果我弄乱np.fft.fft()/ np.fft.fft2()/ np.fft.fftn()的参数(轴等),我可以得到的最好是相同的值但是移位了.遗憾的是,手动移位不是一种选择,因为Msig矩阵的大小和形状因输入参数而异.
你有什么线索如何解决这个问题,可能是什么原因?
Bi *_*ico 15
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]])
Run Code Online (Sandbox Code Playgroud)
要么
>>> 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]])
Run Code Online (Sandbox Code Playgroud)