Python 算法打包后只有 70M 字节,相比起来非常小,且 Python 在科学计算领域有丰富的开源生态, 也有很多并行加速计算的技术,对 AI 支持良好,具有较大潜力。
MaToPy 包含一个编译器和Python运行库, 可以节省您大量的 Matlab 转 Python 开发和调试时间,对大中型的 Matlab 算法项目尤其方便。 代码转换准确率高,减少了转换后 python 代码的修改和调试工作量,并且 MaToPy 还具备以下优点。
您的Matlab代码将通过您本地的 MaToPy 编译器转译,所有计算都在本地机器完成,代码无需上传到服务器,避免安全隐患。 编译器基于计算机编译原理开发,稳定性高,可靠性强,有效降低代码泄露的风险。
MaToPy 的运行库虽然是 Python 语言的,但使用了和 Matlab 一样的习惯约定,例如下标是从 1 开始的而不是 0, 函数的名称、参数与 Matlab 相似, 让熟悉 Matlab 的用户使用 MaToPy 运行库更容易上手,对比 Matlab 和 Python 代码更加便捷。
MaToPy 还在不断扩展支持的 Matlab 函数库,基于已有的 MaToPy 矩阵运算库,可以方便地实现新的 Matlab 函数。 因为 Python 拥有丰富的科学计算生态和众多开源库,如 numpy、pandas、scipy、pytorch、tensorflow 等,是在科学计算领域具有重要地位的语言之一。 因此基于 MaToPy 和丰富的 Python 生态库,能够便捷地实现各种 Matlab 的函数。
MATLAB 代码
function [name, name2, name3] = test_matopy(f)
% 函数调用
% 如果与 python 内建函数名冲突,则加 m_ 前缀,例如 dir 会翻译为 m_dir 函数。
name = dir(f);
% 自动添加返回值个数参数 nargout,让 python 函数知道本次调用需要返回的变量个数
[turnout_result,turnout_info] = sub_analysis(fname0,line_name,tz_turnout);
% 创建数组
A = [1 2 3]
% 串联矩阵
B = [A, 4, 5]
B = [A 4 5]
% 垂直串联矩阵。
C = [A; 4 5 6]
% 复杂一些的矩阵组合
D = [1 2 3;
4 5 6]
% 更复杂的二维矩阵创建
F = [a-b(), c(1:2); d(1,2), e];
% 支持字符向量串联
dir([fname_dir0 '*.geo'])
% 条件索引
id_tmp=find(wdisp_ver>=mile_sw0 & wdisp_ver<=mile_sw1);
% 逻辑运算:元素或运算
indmin = find(d1.*d2<0 & d1<0)+1;
% if 表达式
if ic0 > 10 | ic1 > 10
a = 1;
end
% & | 混排的表达式,优先级就很重要了
a = d1 | d2 & d3
b = d1 && d2 & d3
Python 代码
@function
def test_matopy(f=None,*args,**kwargs):
varargin = test_matopy.varargin
nargin = test_matopy.nargin
# 函数调用
name=m_dir(f)
# 自动添加返回值个数参数 nargout,让 python 函数知道本次调用需要返回的变量个数
turnout_result,turnout_info=sub_analysis(fname0,line_name,tz_turnout,nargout=2)
# 创建数组
A=horzcat(1,2,3)
# 串联矩阵
B=horzcat(A,4,5)
B=horzcat(A,4,5)
# 垂直串联矩阵。
C=vertcat(A, horzcat(4,5,6))
# 复杂一些的矩阵组合
D=vertcat(horzcat(1,2,3), horzcat(4,5,6))
# 更复杂的二维矩阵创建
F=vertcat(horzcat(a - b(),c(arange(1,2))), horzcat(d(1,2),e))
# 支持字符向量串联
m_dir(horzcat(fname_dir0,'*.geo'))
# 条件索引
id_tmp=find(logical_and(wdisp_ver >= mile_sw0,wdisp_ver <= mile_sw1))
# 逻辑运算:元素或运算
indmin=find(logical_and(times(d1,d2) < 0,d1 < 0)) + 1
# if 表达式
if logical_or(ic0 > 10,ic1 > 10):
a=1
# & | 混排的表达式,优先级就很重要了
a=logical_or(d1,logical_and(d2,d3))
b=d1 and logical_and(d2,d3)
# 自动创建返回变量语句
return name,name2,name3
MaToPy 目前处于测试、试用阶段,只实现了部分 Matlab 的函数, 其他函数需要自己实现,要求熟悉 Matlab、MaToPy 函数库、numpy 和 python 开发,否则也无法达到期望的结果。
另外,MaToPy 编译得到的 Python 代码,需要手工调整、调试,如果不熟悉 Python 开发调试技术、 MaToPy 函数库(尤其是 matlabarray 类的用法)和 Matlab 也无法得到可运行的结果。
如果您对 MaToPy 感兴趣,请仔细阅读“免责声明”和“使用许可”,如果同意,欢迎联系我们获取试用版本,
我们的邮箱是 contact@telecwin.com; 联系微信号是 ipandabot,添加微信时请注明“咨询 MaToPy”,感谢您的关注!