详解Matlab调用Python的多种方法

matlab调用python的各种方法详解

文章目录

  • matlab调用python的各种方法详解
  • 1 调用自定义python函数
  • 例子
  • 2 访问 Python 内置模块
  • 3 从 MATLAB 运行python脚本
  • 3.1 PYRUNFILE(FILE)
  • 格式
  • 例子
  • 3.2 [ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS)
  • 格式
  • 例子
  • 获取更多的返回变量
  • 3.3 [ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS})
  • 格式一
  • 例子
  • 格式二
  • 例子
  • 在MATLAB中,可以使用py函数来调用Python模块和函数。在此基础上,我们可以很轻易的调用python中的各种模块,方便我们在神经网络上的应用仿真。

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

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

    2. 在MATLAB命令窗口中,使用pyversion命令检查MATLAB当前使用的Python版本。确保它是你希望调用的Python版本。

    3. 使用py.module_name语法来引入Python模块。module_name是你要调用的Python模块的名称。

    4. 调用Python模块中的函数或方法。使用.操作符来访问模块中的函数和方法。

    1 调用自定义python函数

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

    例子

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

    2 访问 Python 内置模块

    要访问 Python 库,请在 Python 名称前添加 py. 前缀。
    访问math模块:

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


    调用list、textwrap:

    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 中,由空格字符分隔。

    格式

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

    例子

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

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

    % 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 数组。

    格式

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

    例子

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

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

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


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

    获取更多的返回变量

    # 已经定义的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三个变量,这是我们都想获取,则可以通过下面的方法:

    
    [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格式的数据。

    格式一

    % 返回值的
    out_vulue = pyrunfile("fun.py argv1 argv2 ...argvn", "var_nam")
    
    例子
    # 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)
    

    调用

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

    格式二

    % 返回值的
    out_vulue = pyrunfile("fun.py", "var_nam", arg1=v1, arg2=v2)
    
    例子
    # 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)
    

    调用:

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 详解Matlab调用Python的多种方法

    发表评论