前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab生成dll使用Python调用+Python安装文件直接生成

Matlab生成dll使用Python调用+Python安装文件直接生成

作者头像
云深无际
发布2021-06-25 15:32:02
2.1K0
发布2021-06-25 15:32:02
举报
文章被收录于专栏:云深之无迹

试试Matlab与Python集成,或是Matlab与C集成:

代码语言:javascript
复制
function c = add(a,b)
        c = a+b
end

先写一个加法得matlab程序

长这样

点第三个

然后选择我们得代码

生成得名字

这里别自动了,没什么用

手动模式

把里面得变量类型设置一下,因为是C语言

为了代码得通用性,double类型得使用

1x1就是一个标量

点击下一步

我们这里就不出声exe了,我们使用python调用dll文件

生成一个c得代码

稍等一下,就好

ok了

代码语言:javascript
复制

  cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS  /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_initialize.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_initialize.c"
add_initialize.c
  cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS  /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_terminate.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_terminate.c"
add_terminate.c
  cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS  /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add.c"
add.c
### Creating dynamic library ".\add.dll" ...
  link /RELEASE  /INCREMENTAL:NO /NOLOGO -subsystem:console,5.02 kernel32.lib ws2_32.lib mswsock.lib advapi32.lib  -dll -def:add.def -out:.\add.dll @add_rtw.rsp  
  正在创建库 .\add.lib 和对象 .\add.exp
### Created: .\add.dll
### Successfully generated all binary outputs.

这段日志是调用得生成器传入得参数

以及对应得输入和输出

matlab与c代码之间得联系

代码语言:javascript
复制
/*
 * File: add.c
 *
 * MATLAB Coder version            : 4.1
 * C/C++ source code generated on  : 30-May-2021 18:23:39
 */

/* Include Files */
#include "add.h"

/* Function Definitions */

/*
 * Arguments    : double a
 *                double b
 * Return Type  : double
 */
double add(double a, double b)
{
  return a + b;
}

/*
 * File trailer for add.c
 *
 * [EOF]
 */
代码语言:javascript
复制
double add(double a, double b)
{
  return a + b;
}
代码语言:javascript
复制
function c = add(a,b)
        c = a+b
end

两个代码的比较

生成得一套代码

成功

代码语言:javascript
复制
C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll

其实有很多得中间文件被生成

可以使用ctypes来调用dll文件

代码语言:javascript
复制
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./add.d")
print("the out is {}".format(lib.add(1.0, 2.0)))

这里是执行结果

代码语言:javascript
复制
deploytool

也可以直接得来输入这个东西

弹出这个

点生成python包

开始工作

成功

生成得目录

代码语言:javascript
复制
python.exe  .\setup.py install

先安装一下

代码语言:javascript
复制
import add
a = add.initialize()
b = a.add(1000.0, 89.0)
print(b)
a.terminate()

里面也可以看到最终 生成的代码

最重要的就是这些了

本文简单的使用matlab自带的代码生成器,分别生成了dll的文件和python的可安装包。未来为了性能可以优先考虑这样的作法,而且matlab的算法编写可真的太容易了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档