【发布时间】:2021-10-11 10:40:40
【问题描述】:
我有 Matlab 代码,我想把它翻译成 Python。 这里我有一个数组
python 数组
import numpy as np
a = [ 81.42663125 -5.6074337j, -26.39236508 -2.20896985j, 0.+0.j, 0.+0.j, 0.+0.j, 81.42663125-5.6074337j, -26.39236508-2.20896985j, 0.+0.j, 0.+0.j, 0.+0.j, -41.21717133+13.27058111j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j,0.+0.j]
b = np.asarray(a)
inverse = np.fft.ifft(b)
matlab数组(与python相同)
a = [ 81.42663125 -5.6074337i; -26.39236508; -2.20896985i; 0.+0.i; 0.+0.i; 0.+0.i; 81.42663125-5.6074337i; -26.39236508-2.20896985i; 0.+0.i; 0.+0.i; 0.+0.i; -41.21717133+13.27058111i; 0.+0.i; 0.+0.i; 0.+0.i; 0.+0.i; 0.+0.i];
inverse = ifft (x);
我尝试用numpy.fft.ifft 反转它,结果如下:
[4.30321006-0.14763913j 5.66633932+3.89294213j -0.79347125-5.89179416j
6.84928702-3.05455565j 9.8032857 +2.39782633j -2.65998456-3.6116546j
10.67141555-4.33907798j 11.24112597+2.56947076j -2.57607321+0.82941132j
11.85609673-4.26124876j 9.03685629+3.33776417j -1.27864139+4.64168411j
8.82623526-4.48145694j 5.49420633+2.5781028j 1.44185722+5.49124955j
3.54488621-5.55845764j]
matlab 的结果是这样的
[4.30321006250000 + 0.147639125000000i
3.54488621443892 + 5.55845764203018i
1.44185722459799 - 5.49124955185143i
5.49420632611877 - 2.57810280349092i
8.82623525708333 + 4.48145694500000i
-1.27864138655093 - 4.64168410598597i
9.03685628560142 - 3.33776416665201i
11.8560967270980 + 4.26124875584204i
-2.57607320833333 - 0.829411319166666i
11.2411259692567 - 2.56947075987604i
10.6714155516520 + 4.33907798310142i
-2.65998456069909 + 3.61165460362471i
9.80328570125000 - 2.39782632583333i
6.84928701535530 + 3.05455564883182i
-0.793471249351424 + 5.89179416040201i
5.66633931998235 - 3.89294213097583i]
我尝试了另一个矩阵,结果不同。我首先尝试转置 python 数组,但没有任何好处。如何获得与matlab相同的结果?
我改变了什么:
- 如果您指出 python 的输出与 Matlab 的值相同但无序。
- 标题“Matlab 和 Python 对傅里叶逆变换的不同计算输出”
【问题讨论】:
-
当我复制粘贴您的语句以在 MATLAB 中创建数组
a时,我得到“连接的矩阵的维度不一致。”接下来,将ifft应用到另一个数组x。请务必复制粘贴您实际运行的代码,否则很难为您提供帮助。 -
当我修复您的 MATLAB 代码时,我得到的输出与您从 Python 获得的输出相同。看来您在 MATLAB 代码中做错了什么。请准确地告诉我们你做了什么。
-
最后一件事:我可以使用
conj(fft(a)/numel(a))复制您的 MATLAB 输出。