前言
在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的各种方法的文章就介绍到这了