python - 如何将 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)
作用。
解决方案
TL;DR Python 不同,你可以像 Matlab 一样制作 Python,在这种情况下我更喜欢 Python 的方法。
在 Pythonxx>0.002
中是一个布尔数组,并且False
处理布尔值,在 Matlab中也是一个逻辑值矩阵,但是在取差之前将它们转换为和这意味着我们在 Matlab 中有更多的可能性True
np.diff
xx>0.002
diff
0
1
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)
(哦,在 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(不转换为浮点数)更好...
推荐阅读
- android - 如何在不使用外部包的情况下添加/获取日历事件
- java - aws s3 withRegion:无法解析方法“withRegion(com.amazonaws.regions.Regions)”
- android - android SwipeRefreshLayout 不允许 WebView 滚动
- javascript - 如何将数据从 google appscript 发送到 html 页面
- angular - 如何从 Angular 8 中的文件输入流下载文件?
- html - 无法在 PowerShell 中触发单击事件
- c# - 在 Azure Function csx 中使用 Microsoft.Azure.Storage
- azure-data-explorer - 在自己的列中获取列名以渲染饼图
- javascript - React 钩子 - onClick 和 useEffect
- ruby - 使用 Ruby 读取包含所有特殊字符的 CSV 文件