admin管理员组文章数量:1794759
一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程
一、前言
我最近在做一个基于图像融合的目标检测工程,我经常用matlab去研究和创新新型的图像融合算法,因为matlab有着python所不可比拟的数据可视化功能和大量的滤波分解框架包;在目标检测等涉及到神经网络的程序编写上,python又是时代的主流。因此,我的工程同时涉及到了matlab和python两种语言,而且我还不能进行手工的统一(主要是不会,并且统一的过程太麻烦),这就涉及到如何将两种程序整合到一起进行使用,也就是在python中调用matlab函数。 网上关于这部分的教程倒是有一些,但是我感觉有点散(这里不针对任何大佬,只是我这个小白的主观感受,勿怪)。 因此我准备用这一篇文章彻底教会大家如何用python调用matlab。
二、现有环境介绍我目前的电脑配置: 系统:window11 matlab版本:2018A python:在anaconda里,可以随时安装任何版本的,但是本人只需要3版本的。
三、在python中安装matlab.engine引擎(实现互联调用) 1、检查自己的matlab支持的python版本方法是找到matlab里自带的python的setup.py文件。一般是在matlab安装目录下的extern->engines->python。 如上图所示,以我自己的电脑为例,我的setup文件所在路径是:E:\\CodeTools_AnZhuangJi\\Matlab\\extern\\engines\\python 找到后直接打开,这个打开方式有多种,可以用电脑装的python编译器,比如pycharm之类的,matlab也可以打开,这里我直接用txt打开了,从圈红的地方可以看出我的matlab支持python的版本有2.7,3.5,3.6。 如果目前所用的python版本有符合要求的就直接用,如果没有就只能重新装一个符合版本的python了。
2、调整python环境并安装matlab.engine引擎为了更全面的讲解如何安装,我这里选择在anaconda里创建一个虚拟环境,从安装适合版本的python开始教大家怎样安matlab.engine。这里用anaconda创建python虚拟环境的方法就不说了,网上一大堆。 如图所示,我创建了一个叫“formatlab“的虚拟环境,它安装的python版本是3.6。 在确定好python准备好后,进入这个python所在的环境,如果你们和我一样选择创建python虚拟环境就得让anaconda propmt进入到这个环境下,如果你的python就装在了window下,那么直接打开cmd就行。 让控制窗口进入到刚才说的matlab中存放setup文件的位置。 以我的电脑为例,先进入我的python环境:formatlab。我的setup文件在‘E:\\CodeTools_AnZhuangJi\\Matlab\\extern\\engines\\python‘,然后用cd指令进入setup文件所在的位置:输入 cd /d E:\\CodeTools_AnZhuangJi\\Matlab\\extern\\engines\\python 然后输入语句: python setup.py install 之后电脑会自动安装,中间会出很语句,只要不是红色的以Error开头的就不用管,最后会显示成功安装,最后可以在此环境下用pip list查看是否安装成功。 如图,当有这个包的时候就证明安装成功了,后面对应的是你的matlab版本,我的matlab是2018A的,所以它显示是R2018a。 至此,已经成功已经99%了。
四、使用matlab.engine实现在python中调用matlab文件 1、导入matlab.engine引擎打开自己的python编译器,配置好刚才弄好的python,确定matlab.engine可以被导入。 注:上图是用pycharm调用虚拟环境中的包的过程,如果各位不是用的pycharm可以将此图自行忽略,只要能保证顺利倒进包即可。
2、python调用matlab通式: import matlab.engine eng = matlab.engine.start_matlab() 返回值 = eng.所要调用的matlab函数文件(参数) eng.quit()讲解: 其中eng = matlab.engine.start_matlab()表示打开matalb进程,为运行.m文件做准备。 然后直接eng.你想调用的m文件函数就可以实现python调用m文件了 eng.quit()的意思是关闭matalb进程,彻底结束调用。
3、实例验证大家可以自己试试下面这个示例: 首先在matlab里创建一个.m文件:ConnectPthon。 文件的内容是:
function sum = ConnectPython(a,b) sum = a +b; end然后将它拖动到python工程文件下,注意:一定要让.m文件和所要调用它的py文件在一个文件目录下,要不然会出现很多问题。 这是ConnectPthon.m在pycharm中打开的样子。 然后创建一个名为:diaoyong的.py文件 文件内容为:
import matlab.engine eng = matlab.engine.start_matlab() ass = eng.ConnectPython(2,3) print(ass) eng.quit()然后开始运行这个py文件,运行结果如下图所示。在这个程序中我们用matlab编写了一个加法程序,函数可以返回参数a+b的值。在python中调用这个函数,成功实现了2+3 = 5 注意事项:当你所连接的.m文件中又调用了其它的.m文件,务必要将被调用的那个.m文件也放进来,这样才能正常运行。
五、其它方法上述这样的方法需要电脑里同时有matlab和python,且在python调用时会打开matlab线程,相当于程序在python和matlab之间不断跳转执行,这样的问题就是会降低执行效率。 其实还有一种方法可以实现彻底摆脱matlab,那就是利用matlab将.m程序封装成python的一个库,然后在使用的时候直接调用这个python包,这样即使所要运行程序的电脑上没有matlab也可以用。关于这方面的功能我还有没有尝试过,不过哔哩哔哩上有人提出过,大家可以参考下这个视频:
www.bilibili/video/BV1ei4y1t7Rw?spm_id_from=333.337.search-card.all.click
Ps:这个视频的前半段也讲了如何利用matlab.engine实现python调用matlab函数。
版权声明:本文标题:一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686763197a99547.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论