首页 > 解决方案 > 如何将 Matlab 代码转换为 Python?

问题描述

我试图将 Matlab 代码转换为 Python,但在这种xx = diff(xx>setpoint);情况下,我在 python 中没有得到相同的结果。

fs = 50;
t = [0:1/fs:1];
xx = sin(2*pi*300*t)+2*sin(2*pi*600*t);

xx = xx(:)'/max(abs(xx));   %-- normalize xx
Lx = length(xx);
Lz = round(0.01*fs);
setpoint = 0.02;      
%xx = filter( ones(1,Lz)/Lz, 1, abs(xx) );
xx = diff(xx>setpoint);

其实我不明白声明的xx = diff(xx>setpoint)作用。

标签: pythonmatlab

解决方案


TL;DR Python 不同,你可以像 Matlab 一样制作 Python,在这种情况下我更喜欢 Python 的方法。


在 Pythonxx>0.002中是一个布尔数组,并且False 处理布尔值,在 Matlab中也是一个逻辑值矩阵,但是在取差之前将它们转换为和这意味着我们在 Matlab 中有更多的可能性Truenp.diffxx>0.002diff01

In [15]: for a, b in ((0,0), (0,1), (1,0), (1,1)): print(np.diff((a,b)))                  
[0]
[1]
[-1]
[0]

In [16]: f, t = False, True 
    ...: for a, b in ((f,f), (f,t), (t,f), (t,t)): print(np.diff((a,b)))                  
[False]
[ True]
[ True]
[False]

当我在 Matlab 中绘图xxdiff(xx>0.02)(哦,在 Octave 中......)我有

在此处输入图像描述

当我在 Python+Numpy+Matplotlib 中绘图时,我xx得到np.diff(xx>0.02)

在此处输入图像描述

为了得到Matlab 的准确结果,我们可以将布尔数组转换为浮点数组,只需乘以即可1.0- 所以这是xx和的图np.diff( 1.0*(xx>0.02) )

在此处输入图像描述

如果 OP 的目的是显示信号在哪里比0.02我敢说的本地 Python(不转换为浮点数)更好...


推荐阅读