[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"``) |

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中,为零时变量,获取不到。

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"``); |

格式二

|-----|-----------------------------------------------------------------------------------------------|
| 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``); |

总结

到此这篇关于matlab调用python的各种方法的文章就介绍到这了

相关推荐
CCblandy几秒前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构
Yan-英杰6 分钟前
【论文精读】 基于 TensorFlow 对卷积神经网络的优化研究:异构式 CPU+GPU 协同计算 + ReLU-Swish 激活函数
python·卷积神经网络
2601_962364977 分钟前
升级电脑人脸登录,选购 Windows Hello 模组常见误区
windows·安全·电脑
小陈不好吃13 分钟前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
ydjs678899-bot25 分钟前
如何在Java中打印pdf静默打印和打印对话框选择
java·python·pdf
把我格子衫拿来1 小时前
误差预算怎么做?从雅可比到蒙特卡洛的三维定位不确定度分析
python·蒙特卡洛·三维定位·误差分析·不确定度
Helix2502 小时前
WinPE 实战:从零制作纯净 Windows 安装与维护 U 盘
windows·安装·uefi·winpe·adk·u盘启动盘·dism
文章永久免费只为良心2 小时前
Ctfshow_Web应用安全与防护_第二章_无字母数字命令执行
前端·python·安全·网络安全·渗透测试·ctf·红队渗透测试
2601_962885722 小时前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python
昔我往昔2 小时前
LangChain_RAG_学习小结
后端·python