[matlab]matlab调用python的各种方法

前言

在MATLAB中,可以使用 py 函数来调用Python模块和函数。在此基础上,我们可以很轻易的调用python中的各种模块,方便我们在神经网络上的应用仿真。

以下是使用MATLAB调用Python模块的基本步骤:

确保你的系统已经正确安装了Python,并且将Python添加到了系统的环境变量中。

在MATLAB命令窗口中,使用 pyversion 命令检查MATLAB当前使用的Python版本。确保它是你希望调用的Python版本。

使用 py.module_name 语法来引入Python模块。 module_name 是你要调用的Python模块的名称。

调用Python模块中的函数或方法。使用 . 操作符来访问模块中的函数和方法。

1 调用自定义python函数

|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | % 添加函数模块路径, 如果路径不在则搜索不到 py.sys.path().append(``'fun/to/path'``) mymod ``= py.importlib.import_module(``'py_name'``) ``% 不要带py后缀,不然报错 a ``= mymod.print_num(``1``) disp(a) |

例子

|-------|------------------------------------------------------|
| 1 2 3 | # num.py def print_num(num): ``return num |

|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | % 添加函数模块路径, 如果路径不在则搜索不到 py.sys.path().append(``'fun/to/path'``) mymod ``= py.importlib.import_module(``'num'``) ``% 不要带py后缀,不然报错 a ``= mymod.print_num(``1``) disp(pwd) disp(a) |

2 访问 Python 内置模块

要访问 Python 库,请在 Python 名称前添加 py. 前缀。访问math模块:

|-----------|---------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | % 引入Python模块 % py.math; % 调用Python模块中的函数 result ``= py.math.sqrt(``4``); disp(result); ``% 显示结果 |

调用list、textwrap:

|---------|--------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | a ``= py.``list``({``'This'``,``'is a'``,``'list'``}); disp(a); b ``= py.textwrap.wrap(``'This is a string'``); disp(b); |

3 从 MATLAB 运行python脚本

3.1 PYRUNFILE(FILE)

PYRUNFILE(FILE) 执行 Python 脚本文件 FILE,它可以被提供为标量字符串、cellstr 或 char 数组。 FILE 必须指定绝对路径或相对路径-相对于当前工作目录,扩展名为".py"的文件的路径。如果脚本文件需要任何命令行参数,则可以通过提供它们在要执行的文件路径之后的 FILE 中,由空格字符分隔。

格式

|-----|--------------------------------------|
| 1 2 | % 返回值的 pyrunfile(``"fun.py"``) |

例子

|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | # 定义num.py的函数 def print_num(num``=``1``): ``print``(``"执行print_num函数"``) ``return num if __name__ ``=``= "__main__"``: ``b ``= print_num(``3``) ``print``(``"hello world!"``) |

matlab中调用,命令行窗口可以得到print打印出的值:

|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | % a string, cellstr ``or a char array % 添加当前python的文件路径 py.sys.path().append(``'fun/to/path'``) % 调用这个函数 pyrunfile(``"num.py"``) |

3.2 [ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS)

OUTVARS \] = PYRUNFILE(FILE, OUTPUTS) 执行文件并返回任何变量由 Python 生成到 MATLAB,通过指定 Python 变量的名称在 OUTPUTS 中并在 OUTVARS 中捕获返回值。 可以提供输出作为字符串、cellstr 或 char 数组。 格式 |-----|---------------------------------------------------------------------| | 1 2 | `%` `返回值的` `out_vulue ``=` `pyrunfile(``"fun.py"``, ``"var_nam"``)` | 例子 |-----------|-----------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | `# num.py` `def` `print_num(num``=``1``):` ` ``return` `num` `if` `__name__ ``=``=` `"__main__"``:` ` ``b ``=` `print_num(``3``)` | matlab中调用,这里不需要导入这个函数,程序会自动搜索这个函数: |-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | `%` `a string, cellstr ``or` `a char array` `%` `添加当前python的文件路径` `py.sys.path().append(``'fun/to/path'``)` `%` `调用这个函数` `myListFile ``=` `pyrunfile(``"num.py"``, ``"b"``)` | ![](https://i-blog.csdnimg.cn/blog_migrate/388e310d480106060e47c461a1286331.png) denominator分母,imag虚部,real实部,numerator分子 **获取更多的返回变量** |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 | `# 已经定义的num.py` `def` `print_num(num``=``1``):` ` ``c ``=` `1` ` ``print``(``"执行print_num函数"``)` ` ``return` `num` `if` `__name__ ``=``=` `"__main__"``:` ` ``a ``=` `print_num(``2``)` ` ``b ``=` `print_num(``3``)` ` ``print``(``"hello world!"``)` | 上面代码中,我们定义了a、b、c三个变量,这是我们都想获取,则可以通过下面的方法: |---|-------------------------------------------------------------------------| | 1 | `[a, b, c] ``=` `pyrunfile(``"num.py"``, [``"a"``, ``"b"``, ``"c"``]);` | 可以发现,a、b的值都成功获取了,但是c没有成功,应为c为在函数print_num中,为零时变量,获取不到。 ![](https://i-blog.csdnimg.cn/blog_migrate/c2ed59df9469d788f14b6a2d7a5e35a0.png) ![](https://i-blog.csdnimg.cn/blog_migrate/11fcb938ec72047db13640a211c914f9.png) #### 3.3 \[ OUTVARS \] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS}) \[ OUTVARS \] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS}) 执行文件并返回OUTPUTS, 并将它们分配给 OUTVARS,使用 varargin{INPUTS} 传递的 MATLAB 数据。 varargin{INPUTS} 可用于将 MATLAB 数据传递给 Python 表达式,格式:名称-值对,其中名称是要分配的 Python 变量的名称,并且该值是 MATLAB 数据或可访问工作区中的变量名称。 varargin{INPUTS}只能用于传递可自动转换为python格式的数据。 **格式一** |-----|------------------------------------------------------------------------------------------| | 1 2 | `%` `返回值的` `out_vulue ``=` `pyrunfile(``"fun.py argv1 argv2 ...argvn"``, ``"var_nam"``)` | **例子** |----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 | `# num.py` `import` `sys` `def` `print_num(num``=``1``):` ` ``ans ``=` `num``+``1` ` ``return` `ans` `if` `__name__ ``=``=` `"__main__"``:` ` ``arg ``=` `sys.argv[``1``]` ` ``print``(``type``(arg))` ` ``b ``=` `print_num(``int``(arg))` ` ``print``(b)` | **调用** |---|-----------------------------------------------| | 1 | `b ``=` `pyrunfile(``"num.py 1"``, ``"b"``);` | ![](https://i-blog.csdnimg.cn/blog_migrate/c92007e45894cba7e3f5f06e2d3a12f9.png) 格式二 |-----|-----------------------------------------------------------------------------------------------| | 1 2 | `%` `返回值的` `out_vulue ``=` `pyrunfile(``"fun.py"``, ``"var_nam"``, arg1``=``v1, arg2``=``v2)` | 例子 |-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 | `# num.py` `def` `print_num(num``=``1``):` ` ``ans ``=` `num``+``1` ` ``return` `ans` `if` `__name__ ``=``=` `"__main__"``:` ` ``num1``=` `x` ` ``num2 ``=` `y` ` ``a ``=` `print_num(num1)` ` ``b ``=` `print_num(num2)` ` ``print``(a)` ` ``print``(b)` | 调用: |---|-----------------------------------------------------------------------------------| | 1 | `[a, b] ``=` `pyrunfile(``"num.py"``, [``"a"``, ``"b"``], x``=``1``, y``=``2``);` | ![](https://i-blog.csdnimg.cn/blog_migrate/22c9fd640e474df373fbc75fadcb2b04.png) ### 总结 到此这篇关于matlab调用python的各种方法的文章就介绍到这了

相关推荐
暴力袋鼠哥2 小时前
基于YOLO11的车牌识别分析系统
python
在无清风2 小时前
Java实现Redis
前端·windows·bootstrap
满怀10154 小时前
【Python进阶】列表:全面解析与实战指南
python·算法
小小菜鸟,可笑可笑5 小时前
Python 注释进阶之Google风格
开发语言·python
upp5 小时前
[bug]langchain agent报错Invalid Format: Missing ‘Action Input:‘ after ‘Action:‘
javascript·python·langchain·bug
小技与小术5 小时前
代码随想录算法训练营day4(链表)
数据结构·python·算法·链表
前端开发张小七5 小时前
每日一练:4.有效的括号
前端·python
gongzairen5 小时前
Ngrok 内网穿透实现Django+Vue部署
后端·python·django
小小毛桃6 小时前
在PyTorch中,使用不同模型的参数进行模型预热
人工智能·pytorch·python
cliffordl6 小时前
ReportLab 导出 PDF(图文表格)
python·pdf