一文实现:在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虚拟环境的方法就不说了,网上一大堆。
图2
  如图所示,我创建了一个叫“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也可以用。关于这方面的功能我还有没有尝试过,不过哔哩哔哩上有人提出过,大家可以参考下这个视频:

https://www.bilibili.com/video/BV1ei4y1t7Rw?spm_id_from=333.337.search-card.all.click

Ps:这个视频的前半段也讲了如何利用matlab.engine实现python调用matlab函数。

来源:Dark universe

物联沃分享整理
物联沃-IOTWORD物联网 » 一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程

发表评论