问题引入

在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划。之前的做法是用python脚本耦合其联系,两者通信的方式是通过文件。后来发现matlab有针对于python的api引擎,瞬间感觉打开了新世界的大门,只需要在python中调用相关的api,就可以完成matlab的工作,再也不用一个一个复制文件了。

解决思路

首先,我安装的是matlab R2015b,对应的python版本为3.4,本来一开始的版本是python36,但是由于matlab2015并不兼容py36,解决方法是,一方面可以通过重新安装高版本的matlab来解决,在高版本的matlab中已经使用了py36的接口。另一方面可以通过修改python版本来实现,通过anconda,可以很简便地安装一个新的py版本,具体的使用情况可以查看conda的帮助文档。

1. 安装matlab engine的py package

在matlab的官方帮助文档里:https://ww2.mathworks.cn/help/matlab/matlab_external/install-the-matlab-engine-for-python.html,可以找到

cd "matlabroot/extern/engines/python"

python setup.py install

即切换到对应matlab的engines目录,然后运行安转脚本。需要注意的是,在安装之前需要切换py版本到3.4,否则默认是base的python,那样会出现错误。

2. 在py脚本里调用matlab engine

在matlab 文档 里https://ww2.mathworks.cn/help/matlab/matlab_external/get-started-with-matlab-engine-for-python.html,声明了对应的matlab engine的启动和使用,其中包含了matlab数据和python数据类型的对应关系。

在文档https://ww2.mathworks.cn/help/matlab/matlab_external/call-matlab-functions-from-python.html里,可以更详细地看到如何使用matlab engine:

import matlab.engine

eng = matlab.engine.start_matlab()

tf = eng.isprime(37)

print(tf) #True

上述的例子是调用了matlab'的判断素数的接口,首先需要在py文件里导入对应的matlab engine包,然后调用start_matlab()来启动引擎,然后使用引擎来得到返回值,需要注意的是,eng下的函数调用不会有提示,需要参照matlab的接口。

上述的是有返回值的调用,当函数具有多个返回值时,那么对应的调用方式如下:

import matlab.engine

eng = matlab.engine.start_matlab()

t = eng.gcd(100.0,80.0,nargout=3)

print(t)

注意当使用具有多个返回值函数的时候,会返回一个python cell,对于含有矩阵的数据,会转换成python的list数据。

当函数没有返回值时,需要使用以下的方式调用:

import matlab.engine

eng = matlab.engine.start_matlab()

eng.doc(nargout=0)

即要声明nargout=0,此时函数不会返回任何参数,如果不声明,就会报错。

3. 在python脚本里调用matlab脚本

该文档的帮助信息在https://ww2.mathworks.cn/help/matlab/matlab_external/call-user-script-and-function-from-python.html,可以看到有两种方式的调用1.直接调用2.调用函数

如果是直接的脚本,比如在triarea.m里写下以下内容:

b = 5;

h = 3;

a = 0.5*(b.* h)

那么在python里就可以直接调用:

import matlab.engine

eng = matlab.engine.start_matlab()

eng.triarea(nargout=0)

就会得到py的打印输出,a=7.5000,这是因为虽然无返回值,但是matlab的输出仍然会显示在py里。当然更方便的方法是调用函数的形式,生成以下的文件:

function a = triarea(b,h)

a = 0.5*(b.* h);

在python中执行以下的调用:

ret = eng.triarea(1.0,5.0)

print(ret)

就会得到2.5,需要注意的是,该函数仅返回一个值,因此无需指定nargout的值。

python调用matlab环境配置、非常详细!!!_[python][matlab]使用python调用matlab程序相关推荐

  1. ubuntu18.04 安装qt5.12.8及环境配置的详细教程

    这篇文章主要介绍了ubuntu18.04 安装qt5.12.8及环境配置的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 环境 系统: ...

  2. 【FLIR工业相机】一、环境配置:win10+VS2017+qt5+spinnaker+opencv+python

    系列文章目录 一.环境配置:win10+VS2017+qt5+spinnaker+opencv+python 二.相机调用:VS2017+qt5调用FLIR工业相机实时成像 三.图像处理:C++调用p ...

  3. pycharm 开发app_windows及mac下开发Excel, python+xlwings开发环境配置

    背景: 孩子他妈天天excel办公,看她每天大量重复性的工作,她是时候学习python来解放自己了,虽然我不用python ~ ~ 网络搜索 xlwings 是python下非常强大的处理Excel的 ...

  4. Python selenium chrome 环境配置

    Python selenium chrome 环境配置一.参考文章:1. 记录一下python easy_install和pip安装地址和方法http://heipark.iteye.com/blog ...

  5. Node介绍及环境配置~超级详细哦

    下面是对Node介绍及环境配置的详细整理,希望可以帮助到有需要的小伙伴~ 文章目录 Node开发概述 学服务器开发的原因 服务端开发要做的事情 为什么选Node Node是什么 Node运行环境搭建 ...

  6. Python灰帽子环境配置

    关于Python灰帽子里面的python代码运行环境配置,需要安装python2.7.x,自行到http://www.python.org下载. 我配置好环境后,把用到的库和pydbg需要替换的文件, ...

  7. python安装及环境配置

    Python--python安装及环境配置 Python安装 Windowns操作系统中安装Python 步骤一 下载安装包 从Python网站https://www.python.org/downl ...

  8. Windows10系统下MPI编程环境配置(超级详细)

    Windows10系统下MPI编程环境配置(超级详细) 1.MS-MPI下载 进入官网下载MPI文件,下载地址: https://www.mpich.org/ 下拉到最底部,点击Microsoft W ...

  9. java环境教程_java环境配置的详细教程(图文)

    本篇文章给大家带来的内容是关于java环境配置的详细教程(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. JAVA环境变量的配置:Path,JAVA_HOME,CLASSPAT ...

  10. 老男孩python全栈9期全套视频_[全套视频] 老男孩Python全栈7期:Flask全套组件及原理剖析视频教程,全套视频教程学习资料通过百度云网盘下载...

    目录├─1398 T* * I K, E% T│ ├─01 python fullstack s7day139 课前分享之找一个对标的人.mp4│ ├─02 python fullstack s7da ...

最新文章

  1. 查看端口号被哪个程序占用
  2. OpenCASCADE:STEP翻译器的介绍
  3. ITK:将静态密集2D级别集可视化为高程图
  4. 对比一段ADC键值读取的代码
  5. php检查函数是否存在,php判断类是否存在函数class_exists用法分析
  6. android日历长按拖拽,CalendarView
  7. iOS 让UIButton根据文字内容自动计算宽高
  8. js保留n位小数——toFiexed()
  9. MySQL 运维及开发规范
  10. 比较好用的Java模拟器,515最好的java模拟器
  11. PDF文件怎么编辑内容
  12. 为什么程序猿 996 会猝死,而企业家 007 却不会?
  13. kubuntu与ubuntu切换
  14. 刘宇凡:莫沉浮华,归于平凡
  15. 大数据给交通行业带来的五大变革 | 交通数据的深度应用
  16. 计算机二进制数的换算
  17. c语言经典案例 俄罗斯方块,C语言实现俄罗斯方块经典游戏课程设计
  18. 指针式仪表识别读数 Python
  19. NCH PhotoPad Pro for Mac(轻量级照片编辑软件)
  20. 2019汇智动力学院课程、服务体系震撼升级

热门文章

  1. 转载给ffmpeg入门级:我的第一个调用FFmpeg库的程序出炉
  2. 解决: Intellij IDEA 运行报错 Command line is too long
  3. 什么是响应式布局设计
  4. [Swift]快速反向平方根 | Fast inverse square root
  5. tkinter拦截关闭事件
  6. C#指南,重温基础,展望远方!(4)表达式
  7. Flask WTForm表单的使用
  8. C语言第三次博客作业---单层循环结构
  9. javascript函数调用的各种方法!!
  10. linux_bash_shell_cheat_sheet(自译)