0


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

前言

在MATLAB中,可以使用

  1. py

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

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

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

在MATLAB命令窗口中,使用

  1. pyversion

命令检查MATLAB当前使用的Python版本。确保它是你希望调用的Python版本。

使用

  1. py.module_name

语法来引入Python模块。

  1. module_name

是你要调用的Python模块的名称。

调用Python模块中的函数或方法。使用

  1. .

操作符来访问模块中的函数和方法。

1 调用自定义python函数

1

2

3

4

5

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

例子

1

2

3

  1. # num.py
  1. def
  1. print_num(num):
  1. return
  1. num

1

2

3

4

5

6

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

2 访问 Python 内置模块

要访问 Python 库,请在 Python 名称前添加

  1. py.

前缀。访问math模块:

1

2

3

4

5

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

调用list、textwrap:

1

2

3

4

  1. a
  1. =
  1. py.
  1. list
  1. ({
  1. 'This'
  1. ,
  1. 'is a'
  1. ,
  1. 'list'
  1. });
  1. disp(a);
  1. b
  1. =
  1. py.textwrap.wrap(
  1. 'This is a string'
  1. );
  1. disp(b);

3 从 MATLAB 运行python脚本

3.1 PYRUNFILE(FILE)

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

格式

1

2

  1. %
  1. 返回值的
  1. pyrunfile(
  1. "fun.py"
  1. )

例子

1

2

3

4

5

6

7

  1. # 定义num.py的函数
  1. def
  1. print_num(num
  1. =
  1. 1
  1. ):
  1. print
  1. (
  1. "执行print_num函数"
  1. )
  1. return
  1. num
  1. if
  1. __name__
  1. =
  1. =
  1. "__main__"
  1. :
  1. b
  1. =
  1. print_num(
  1. 3
  1. )
  1. print
  1. (
  1. "hello world!"
  1. )

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

1

2

3

4

5

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

3.2 [ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS)

[ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS) 执行文件并返回任何变量由 Python 生成到 MATLAB,通过指定 Python 变量的名称在 OUTPUTS 中并在 OUTVARS 中捕获返回值。 可以提供输出作为字符串、cellstr 或 char 数组。

格式

1

2

  1. %
  1. 返回值的
  1. out_vulue
  1. =
  1. pyrunfile(
  1. "fun.py"
  1. ,
  1. "var_nam"
  1. )

例子

1

2

3

4

5

  1. # num.py
  1. def
  1. print_num(num
  1. =
  1. 1
  1. ):
  1. return
  1. num
  1. if
  1. __name__
  1. =
  1. =
  1. "__main__"
  1. :
  1. b
  1. =
  1. print_num(
  1. 3
  1. )

matlab中调用,这里不需要导入这个函数,程序会自动搜索这个函数:

1

2

3

4

5

  1. %
  1. a string, cellstr
  1. or
  1. a char array
  1. %
  1. 添加当前python的文件路径
  1. py.sys.path().append(
  1. 'fun/to/path'
  1. )
  1. %
  1. 调用这个函数
  1. myListFile
  1. =
  1. pyrunfile(
  1. "num.py"
  1. ,
  1. "b"
  1. )

denominator分母,imag虚部,real实部,numerator分子

获取更多的返回变量

1

2

3

4

5

6

7

8

9

  1. # 已经定义的num.py
  1. def
  1. print_num(num
  1. =
  1. 1
  1. ):
  1. c
  1. =
  1. 1
  1. print
  1. (
  1. "执行print_num函数"
  1. )
  1. return
  1. num
  1. if
  1. __name__
  1. =
  1. =
  1. "__main__"
  1. :
  1. a
  1. =
  1. print_num(
  1. 2
  1. )
  1. b
  1. =
  1. print_num(
  1. 3
  1. )
  1. print
  1. (
  1. "hello world!"
  1. )

上面代码中,我们定义了a、b、c三个变量,这是我们都想获取,则可以通过下面的方法:

1

  1. [a, b, c]
  1. =
  1. pyrunfile(
  1. "num.py"
  1. , [
  1. "a"
  1. ,
  1. "b"
  1. ,
  1. "c"
  1. ]);

可以发现,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

  1. %
  1. 返回值的
  1. out_vulue
  1. =
  1. pyrunfile(
  1. "fun.py argv1 argv2 ...argvn"
  1. ,
  1. "var_nam"
  1. )

例子

1

2

3

4

5

6

7

8

9

10

  1. # num.py
  1. import
  1. sys
  1. def
  1. print_num(num
  1. =
  1. 1
  1. ):
  1. ans
  1. =
  1. num
  1. +
  1. 1
  1. return
  1. ans
  1. if
  1. __name__
  1. =
  1. =
  1. "__main__"
  1. :
  1. arg
  1. =
  1. sys.argv[
  1. 1
  1. ]
  1. print
  1. (
  1. type
  1. (arg))
  1. b
  1. =
  1. print_num(
  1. int
  1. (arg))
  1. print
  1. (b)

调用

1

  1. b
  1. =
  1. pyrunfile(
  1. "num.py 1"
  1. ,
  1. "b"
  1. );

格式二

1

2

  1. %
  1. 返回值的
  1. out_vulue
  1. =
  1. pyrunfile(
  1. "fun.py"
  1. ,
  1. "var_nam"
  1. , arg1
  1. =
  1. v1, arg2
  1. =
  1. v2)

例子

1

2

3

4

5

6

7

8

9

10

11

  1. # num.py
  1. def
  1. print_num(num
  1. =
  1. 1
  1. ):
  1. ans
  1. =
  1. num
  1. +
  1. 1
  1. return
  1. ans
  1. if
  1. __name__
  1. =
  1. =
  1. "__main__"
  1. :
  1. num1
  1. =
  1. x
  1. num2
  1. =
  1. y
  1. a
  1. =
  1. print_num(num1)
  1. b
  1. =
  1. print_num(num2)
  1. print
  1. (a)
  1. print
  1. (b)

调用:

1

  1. [a, b]
  1. =
  1. pyrunfile(
  1. "num.py"
  1. , [
  1. "a"
  1. ,
  1. "b"
  1. ], x
  1. =
  1. 1
  1. , y
  1. =
  1. 2
  1. );

总结

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

标签: python matlab windows

本文转载自: https://blog.csdn.net/FL1768317420/article/details/140257203
版权归原作者 FL1768317420 所有, 如有侵权,请联系我们删除。

“[matlab]matlab调用python的各种方法”的评论:

还没有评论