# 在Matlab中调用Python
MATLAB自R2014b后可以在command窗口中调用Python<sup>[1]</sup>, 实现MATLAB与Python的相对深度的融合, 由此可以提供一定的桥梁作用。本文对此做一个简单的介绍。
### 设置/查看Python版本
```
pyversion("path/to/python/excutable/pythonw.exe") % or "python" in Linux
```
**该设置支持Anaconda下创建的Python虚拟环境**。
在设置版本而未调用任何Python命令之前还可以修改定位到不同的Python环境, 而一旦调用了任意的Python命令, 在当前的MATLAB环境下的Pyton环境就确定了, 如需更改只能重新启动MATLAB。
### 导入Module
```
tf = py.importlib.module("tensorflow");
```
以上指令等效于Python下的`import tensorflow as tf`命令, 执行该命令后可以在MATLAB的command窗口中以`tf`访问该模块下的任意方法。需要注意的是, 相应的module务必需要在相应的Python环境下安装, 或者可以通过添加搜索路径的方式将需要导入的模块所在的路径包含进来。具体的操作方式可以参见[2], 否则将会提示`Undefined variable "py" or function "py.command"`。
### 构造`kwargs`
Python函数的一大便利在于其键值对输入, 在MATLAB许多内建的函数同样有该特性, 但是在MATLAB中调用Python的函数并不能**直接**套用键值对参数输入的方式, 好在MATLAB也提供了相应的解决方案, 即`pyargs`<sup>[3]</sup>。其用法很直观,
> `kwa = pyargs(argKey,argValue)` creates one or more `pyargs` keyword arguments to pass to a Python® function.
### 另一种调用Python的方式
有了以上的三个步骤基本能够应对绝大多数情况下由MATLAB调用Python的情形。此外, Matlab还提供了一种调用Python的方式, 如下:
```
!ptyhon -c "python codes ... "
```
或者,
```
!python -m python_module
```
但是, 需要注意的是, 这种调用方式与MATLAB本身并没有任何的“交互”, 仅仅是把command窗口当作一个命令行。 当然其Python的版本是由pyversion设定的。这两条指令的返回值也仅仅是flag, 以表示指令是否成功执行。
### `HDF5`冲突
如果导入的模块依赖HDF5模块, 例如: `tensorflow`, `keras`, 那么很有可能出现HDF5冲突问题, 从而导致MATLAB崩溃。具体的原因在于, MATLAB内建有对HDF5的支持, 但其版本可能与所引入Python模块的HDF5版本不一致, 而当遇到版本不匹配的情况时, MATLAB会abort, 导致崩溃。
**解决方案**: 参考[4]中的方案, 可以试着安装与MATLAB内建HDF5一致的版本(可以通过`[majnum,minnum,relnum] = H5.get_libversion()`获取MATLAB的HDF5版本), 但是可能造成Python模块的依赖问题, 总之并非一个完美的方案。而如果是Linux系统下的MATLAB, 则有一个完美的解决方案, 思路是`LD_PRELOAD`链接到与Python模块匹配的HDF5库, 从而绕开该问题。
```
>> RTLD_NOW = 2;
>> RTLD_DEEPBIND = 8;
>> flag = bitor(RTLD_NOW, RTLD_DEEPBIND); % RTLD_NOW | RTLD_DEEPBIND
>> py.sys.setdlopenflags(int32(flag));
>> py.importlib.import_module('tensorflow');
```
### 参考
1. [Mathworks, Python Libraries](https://www.mathworks.com/help/matlab/call-python-libraries.html)
2. [Undefined variable "py" or function "py.command"](https://www.mathworks.com/help/matlab/matlab_external/undefined-variable-py-or-function-py-command.html)
3. [Mathworks, pyargs](https://www.mathworks.com/help/matlab/ref/pyargs.html)
4. [Importing custom python module fails](https://www.mathworks.com/matlabcentral/answers/265247-importing-custom-python-module-fails#comment_338642)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在MATLAB中,可以使用py函数来调用Python模块和函数。在此基础上,我们可以很轻易的调用python中的各种模块,方便我们在神经网络上的应用仿真。 以下是使用MATLAB调用Python模块的基本步骤: 确保你的系统已经正确安装了Python,并且将Python添加到了系统的环境变量中。 在MATLAB命令窗口中,使用pyversion命令检查MATLAB当前使用的Python版本。确保它是你希望调用的Python版本。 使用py.module_name语法来引入Python模块。module_name是你要调用的Python模块的名称。 调用Python模块中的函数或方法。使用.操作符来访问模块中的函数和方法。 1 调用自定义python函数
资源推荐
资源详情
资源评论
收起资源包目录
Matlab中调用Python小结.rar (4个子文件)
Matlab中调用Python小结
计算机毕业总结.pdf 647KB
matlab-python-master
readme.md 4KB
keras_model_test.m 2KB
array2numpy.m 585B
共 4 条
- 1
资源评论
野生的大熊
- 粉丝: 230
- 资源: 247
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 原生微信小程序源码 - -滴滴公交-查公交
- 人工智能实验四 感知器算法的设计实现
- java小项目多线程多线程 复制文件 冒泡排序 群聊
- 四数之和(java代码).docx
- 701837906919458TapScanner v3.0.10 (Pro).apk
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 289ssm-mysql-jsp 计算机课程实验管理系统.zip(可运行源码+数据库文件+文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功