前言。
MATLAB,可以使用 。py 。
调用Python模块和函数的函数。在此基础上,Python中的各种模块可以很容易地调用c;方便我们在神经网络上的应用模拟。
使用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!" )。
|
在上述代码中c;我们定义了a、b、三个c变量,这就是我们想要得到的,可采用以下方法:。
1。 | [a, b, c]。 = pyrunfile(。 "num.py" , [。 "a" , "b" , "c" ]);
|
可以发现a、所有b的值都成功获得,但是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的各种方法。
【责任编辑:新华网】