前言

本文是一次python调用matlab编译成的动态链接库的简单尝试,为了有需求的朋友可以学习如何完成自己matlab代码的编译和python调用,主要用于某些项目不方便安装matlab运行环境的情况。

本文主要是实现用python调用matlab写的加法函数,主要流程如下:




如何将python代码变为matlab python代码转matlab_python


2. MATALB编译为动态链接库dll

这部分介绍如何利用MATLAB Coder工具实现addition函数的编译。

2.1 addition.m函数和test.m测试程序

addition.m函数,主要输出a+b的值。

function out = addition(a, b)
s = a + b;
out =s;
end

test.m测试程序,用于MATLAB Coder测试addition函数。

a=1;
b=1;
c = addition(a,b);

2.2 MATLAB Coder编译addition.m函数

采用MATLAB Coder编译addition.m函数的主要步骤包括:

(1)打开addition.m和test.m所在文件夹,并打开MATLAB Coder APP。


如何将python代码变为matlab python代码转matlab_如何将python代码变为matlab_02


(2)输入要编译的函数名,本文为addition.m函数,输入后点击Next。


如何将python代码变为matlab python代码转matlab_如何将python代码变为matlab_03


(3)点击Next。


如何将python代码变为matlab python代码转matlab_Powered by 金山文档_04


(4)输入测试脚本名称,本文为test.m文件,输入后按回车键,出现addition.m函数两个输入形参及其类型。


如何将python代码变为matlab python代码转matlab_python_05


(5)根据实际需求,选择addition.m函数两个输入形参类型,本文为double类型,完成后点击Next。


如何将python代码变为matlab python代码转matlab_python_06


(6)点击“Check for Issues”按键,进行错误检查,检查无误后如下图。


如何将python代码变为matlab python代码转matlab_动态链接库_07


如何将python代码变为matlab python代码转matlab_python_08


(7)选择“Build type”,可以为C/C++源代码,本文为动态链接库(Dynamic Librery),选择完成后点击“Generate”按钮,完成编译。


如何将python代码变为matlab python代码转matlab_matlab_09


(8)编译完成后,出现预览界面,点击Next,完成本次编译。


如何将python代码变为matlab python代码转matlab_Powered by 金山文档_10


如何将python代码变为matlab python代码转matlab_如何将python代码变为matlab_11


如何将python代码变为matlab python代码转matlab_如何将python代码变为matlab_12


3 python调用addition.dll动态链接库

3.1 复制addition.dll动态链接库

将addtion.dll动态链接库复制到与toMatdll.py脚本同一文件夹,方面演示和调用。


如何将python代码变为matlab python代码转matlab_Powered by 金山文档_13


3.2 创建toMatdll.py函数

toMatdll.py代码如下,使用ctypes库进行调用。

from ctypes import *
dll = CDLL(r"./addition.dll")
dll.addition.restype = c_double #设置函数输出
sum = dll.addition(c_double(1),c_double(2))
print(sum)

下面分别说明每一部分内容:

3.1.1 创建连接

dll = CDLL(r"./addition.dll")

3.1.2 设置输出格式

输出格式为double类型,若不设置输出格式,输出结果会出错。

dll.addition.restype = c_double #设置函数输出

3.1.3 传入计算参数

注意传入的每个参数都要给定参数类型,类型与编译时选择的参数类型一致,具体类型见下表。

sum = dll.addition(c_double(1),c_double(2))


如何将python代码变为matlab python代码转matlab_Powered by 金山文档_14


ctypes tpye


3.1.4 调用计算结果

调用后的输出结果为3.0。


如何将python代码变为matlab python代码转matlab_动态链接库_15


4 输出数值不对错误

由于没有设置输出数据类型,添加上输出类型设置语句即可。


如何将python代码变为matlab python代码转matlab_动态链接库_16


5总结

本博客只是对python调用matlab编译的动态链接库的一次简单尝试,但其他matlab函数编译基本原理一致,具体能编译的函数见MathWorks。