Matlab 算法部署时需要安装庞大的运行时环境,文件大小超过 2G 字节,对算法的产品化是一个很大负担。 而 Python 算法打包后只有 70M 字节,相比起来非常小,且 Python 在科学计算领域有丰富的开源生态,也有很多并行加速计算的技术,对 AI 支持非常好,潜力很大,因此是算法开发的最佳选择。
MaToPy 包含一个编译器和Python运行库,可以节省您大量的 Matlab 转 Python 开发和调试时间,对大中型的 Matlab 算法项目尤其方便。 用 MaToPy 转换的代码几乎不需要调整就可以正常运行,并且 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 感兴趣,欢迎随时联系我们获取试用版本,我们的邮箱是 contact@telecwin.com。
联系微信号是 ipandabot,添加微信时请注明“咨询 MaToPy”,感谢您的关注!