一、前言

  我最近在做一个基于图像融合的目标检测工程,我经常用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也可以用。关于这方面的功能我还有没有尝试过,不过哔哩哔哩上有人提出过,大家可以参考下这个视频:

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

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

一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程相关推荐

  1. 在Anaconda中使用jupyter的保姆级安装教程

    一.下载Anaconda 1.进入官方地址: Anaconda下载地址 2.根据自己的电脑操作系统下载: 二.安装Anaconda 1.点击next,进入下一个流程: 2.点击同意条款: 3.根据自己 ...

  2. 如何在Python中调用C++程序?(文中以Opencv为例,在Python中调用C++的Opencv)

    https://www.cnblogs.com/zf-blog/p/11906786.html 要注意什么? 要注意在头文件.h中将需要引用的函数包括在 extern "C"中. ...

  3. matlab下载保姆级安装教程,哪个版本比较好些?

    Matlab最新版是款功能实用性强的商业数学工具.Matlab官方版可以用于分析数据.开发算法.创建模型,数据图表生成.APP打包.APP开发.并且Matlab还广泛应用于:数据分析.无线通信.深度学 ...

  4. python调用simulink_[Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: MATLAB Engine API的使用文档: 原材料: 1.MATLAB 2015a  32位的 2.Python 2.7.13    32位的 安装: 1.运行cmd,切 ...

  5. 如何在Python中调用MATLAB

    最近在实验室做点杂活,一点声音的生成.录音.处理工作.鉴于实验内容需要,不得不找点办法在MATLAB和Python之间建个接口,从Python中调用MATLAB脚本或者是MATLAB的函数.内容不是很 ...

  6. 如何在python中调用MATLAB代码(利用anaconda完美解决多python环境问题)

    不知道有没有小伙伴遇到和我一样的问题,需要在python代码中使用MATLAB代码运行得到的结果,但是如果直接将MATLAB改写成python,工作量又被加大 那么这时候就需要利用官方给出的方法,在p ...

  7. [转载] 扩展Python之在Python中调用C编写的函数模块

    参考链接: 如何在Python中调用C函数 目录 编写Python扩展1. 创建应用代码2. 根据样板编写封装代码2.1 包含Python头文件2.2 为每一个模块函数添加形如PyObject* *M ...

  8. 在Python中调用C/C++:cython及pybind11

    在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...

  9. 在python中调用js或者nodejs要使用PyExecJs第三方包。

    在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...

最新文章

  1. LeetCode简单题之圆形赛道上经过次数最多的扇区
  2. dotNet core Windows上 部署
  3. 浮动窗口代码(带关闭按钮+全屏漂浮)
  4. 线程魔术技巧:Java线程可以做的5件事
  5. Python 运算符重载
  6. 小米手机安装证书(安卓)
  7. tomcat人数限制_Tomcat 七最大并发连接数的正确修改方法
  8. IDEA 查看源码快捷键
  9. winform 拖动无边框窗体(调用Windows API)
  10. 电商数据之战背后利益纠葛:触动最敏感神经
  11. selenium学习第一步(firefox安装firebug和firepath插件)
  12. 地铁bas服务器系统,地铁BAS系统构成及工作原理
  13. 小米手机怎么设置来电铃声?超过90%的人都是这样设置的…
  14. QComboBox实现下拉框check勾选
  15. cork--快速,精确的线性布尔运算
  16. 【iMessage苹果推群发】苹果相册推它由pushchatkey.pem和pushchatcert.pem作为单独的文件使用
  17. 团队管理之《十人以下小团队管理手册》
  18. 一篇文章带你弄懂乐观锁与悲观锁,CAS原子性,synchronized底层原理
  19. 初入神经网络剪枝量化4(大白话)
  20. 伪装计算机主机,求告知怎么伪装电脑配置

热门文章

  1. execve 执行遇到的问题-已解决
  2. Linux虚拟机配置网络代理配置yum源
  3. 什么是Remoting
  4. C语言汉字gbk转utf-8
  5. 2023 华为 Datacom-HCIE 真题题库 06/12--含解析
  6. Windows10系统添加虚拟网卡(Microsoft Loopback Adapter)的方法
  7. emplace_back() 和 push_back 的区别
  8. 2018最新北风网人工智能全套分享
  9. 李大学:互联网裂变里最重要的是资金流|正和岛|正和岛联席总裁黄丽陆|2015正和岛东部(海宁)论坛_新浪财经_新浪网...
  10. 03 - 滤波器组典型相关分析(Filter bank canonical correlation analysis,fbcca)