当前位置:首页 » 《我的小黑屋》 » 正文

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

22 人参与  2024年09月29日 14:00  分类 : 《我的小黑屋》  评论

点击全文阅读


前言

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/166182.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1