前言
本文是一次python调用matlab编译成的动态链接库的简单尝试,为了有需求的朋友可以学习如何完成自己matlab代码的编译和python调用,主要用于某些项目不方便安装matlab运行环境的情况。
本文主要是实现用python调用matlab写的加法函数,主要流程如下:
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。
(2)输入要编译的函数名,本文为addition.m函数,输入后点击Next。
(3)点击Next。
(4)输入测试脚本名称,本文为test.m文件,输入后按回车键,出现addition.m函数两个输入形参及其类型。
(5)根据实际需求,选择addition.m函数两个输入形参类型,本文为double类型,完成后点击Next。
(6)点击“Check for Issues”按键,进行错误检查,检查无误后如下图。
(7)选择“Build type”,可以为C/C++源代码,本文为动态链接库(Dynamic Librery),选择完成后点击“Generate”按钮,完成编译。
(8)编译完成后,出现预览界面,点击Next,完成本次编译。
3 python调用addition.dll动态链接库
3.1 复制addition.dll动态链接库
将addtion.dll动态链接库复制到与toMatdll.py脚本同一文件夹,方面演示和调用。
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))
ctypes tpye
3.1.4 调用计算结果
调用后的输出结果为3.0。
4 输出数值不对错误
由于没有设置输出数据类型,添加上输出类型设置语句即可。
5总结
本博客只是对python调用matlab编译的动态链接库的一次简单尝试,但其他matlab函数编译基本原理一致,具体能编译的函数见MathWorks。