如何将Matlab代码转换为Python?

如何将Matlab代码转换为Python?,python,matlab,Python,Matlab,我试图将Matlab代码转换成Python,但在这里,xx=diff(xx>settpoint)情况我在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));%规范化xx Lx=长度(xx); Lz=圆形(0.01*fs); 设定值=0.02; %xx=过滤器(一个(1,Lz)/Lz,1,abs(xx)); xx=差异(xx>设定点); 事实上,我不明

我试图将Matlab代码转换成Python,但在这里,
xx=diff(xx>settpoint)情况我在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));%规范化xx
Lx=长度(xx);
Lz=圆形(0.01*fs);
设定值=0.02;
%xx=过滤器(一个(1,Lz)/Lz,1,abs(xx));
xx=差异(xx>设定点);

事实上,我不明白语句
xx=diff(xx>settpoint)
做了什么。

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


Python中的
xx>0.002
是一个布尔值数组,
False
True
np.diff
将布尔值视为布尔值,在Matlab中,
xx>0.002
也是一个逻辑值矩阵,但是
diff
将它们转换为
0
1
,然后再进行差异,这意味着我们在Matlab中有更多的可能性

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中绘制
xx
diff(xx>0.02)
时(哦,在倍频程中…),我有

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

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


如果OP的目的是显示信号大于
0.02的位置,我敢说本机Python(不转换为浮点)在这方面更好…

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


Python中的
xx>0.002
是一个布尔值数组,
False
True
np.diff
将布尔值视为布尔值,在Matlab中,
xx>0.002
也是一个逻辑值矩阵,但是
diff
将它们转换为
0
1
,然后再进行差异,这意味着我们在Matlab中有更多的可能性

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中绘制
xx
diff(xx>0.02)
时(哦,在倍频程中…),我有

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

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


如果OP的目的是显示信号大于
0.02
的位置,我敢说本机Python(不转换为浮点)在这方面更好…

您是说您的Python代码表现不同,请将您的Python代码添加到您的问题中。您是说您的Python代码表现不同,请将您的python代码添加到您的问题中。您对MATLAB的解释稍有偏差,
xx>0.002
是数据类型逻辑,但
false-true
的结果是值-1的两倍。@Daniel我会更正答案,谢谢您的更正。您对MATLAB的解释稍有偏差,
xx>0.002
是逻辑数据类型,但是
false-true
的结果是-1的两倍。@Daniel我会更正答案,谢谢您的更正。