MaToPy,一套自动将 Matlab 代码转为 Python 代码的编译器和运行时函数库。

可以快速将 Matlab 代码自动转译为 Python 代码,得到的 Python 代码和 Matlab 代码极为相似,非常便于维护,且转换准确率很高,几乎不用人工修改就可以顺利运行。

为何选择 MaToPy

Matlab 算法部署时需要安装庞大的运行时环境,文件大小超过 2G 字节,对算法的产品化是一个很大负担。 而 Python 算法打包后只有 70M 字节,相比起来非常小,且 Python 在科学计算领域有丰富的开源生态,也有很多并行加速计算的技术,对 AI 支持非常好,潜力很大,因此是算法开发的最佳选择。

MaToPy 包含一个编译器Python运行库,可以节省您大量的 Matlab 转 Python 开发和调试时间,对大中型的 Matlab 算法项目尤其方便。 用 MaToPy 转换的代码几乎不需要调整就可以正常运行,并且 MaToPy 还具备以下优点。

安全可靠

您的Matlab代码将通过您本地的 MaToPy 编译器转译,所有计算都在本地机器完成,代码无需上传到服务器,具备企业级安全性。 编译器基于计算机编译原理开发,稳定可靠。没有代码泄露的风险。

遵循Matlab约定

MaToPy 的运行库虽然是 Python 语言的,但使用了和 Matlab 一样的习惯约定,例如下标是从 1 开始的而不是 0, 函数的名称、参数与 Matlab 一模一样, 让熟悉 Matlab 的用户使用 MaToPy 运行库非常容易,对比 Matlab 和 Python 代码更简单。

容易扩展

MaToPy 还在不断扩展支持的 Matlab 函数库,基于已有的 MaToPy 矩阵运算库,可以很方便地实现新的 Matlab 函数。 因为 Python 有强大的科学计算生态,有非常多的开源库,例如 numpy、pandas、scipy、pytorch、tensorflow 等等,是未来科学计算的不二选择。 因此基于 MaToPy 和强大的 Python 生态库,可以非常方便地实现各种 Matlab 的函数。

MaToPy 转换示例

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

MaToPy

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”,感谢您的关注!