Explicación detallada de varios métodos para llamar a python desde matlab

Explicación detallada de varios métodos para llamar a python desde matlab

En MATLAB, puede usar pyfunciones para llamar a módulos y funciones de Python. Sobre esta base, podemos llamar fácilmente a varios módulos en python para facilitar la simulación de nuestra aplicación en la red neuronal.

Los siguientes son los pasos básicos para llamar a un módulo de Python utilizando MATLAB:

  1. Asegúrese de que su sistema haya instalado Python correctamente y haya agregado Python a las variables de entorno del sistema.

  2. En la ventana de comandos de MATLAB, utilice pyversionel comando para comprobar la versión de Python que MATLAB utiliza actualmente. Asegúrese de que sea la versión de Python que desea invocar.

  3. Utilice py.module_namela sintaxis para importar módulos de Python. module_namees el nombre del módulo de Python al que desea llamar.

  4. Llame a una función o método en un módulo de Python. Use .operadores para acceder a funciones y métodos en un módulo.

1 Llamar a la función de python personalizada

% 添加函数模块路径, 如果路径不在则搜索不到
py.sys.path().append('fun/to/path')

mymod = py.importlib.import_modular('py_name')  % 不要带py后缀,不然报错
a = mymod.print_num(1)
disp(a)

ejemplo

# 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)

inserte la descripción de la imagen aquí

2 Acceder a los módulos integrados de Python

Para acceder a una biblioteca de Python, anteponga el nombre de Python con py..
Accede al módulo de matemáticas:

% 引入Python模块
% py.math;

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

inserte la descripción de la imagen aquí
Lista de llamadas, ajuste de texto:

a = py.list({
    
    'This','is a','list'});
disp(a);

b = py.textwrap.wrap('This is a string');
disp(b);

inserte la descripción de la imagen aquí

3 Ejecución de scripts de python desde MATLAB

3.1 PYRUNFILE(ARCHIVO)

PYRUNFILE(FILE) ejecuta el archivo de secuencia de comandos de Python FILE, que se puede proporcionar como una cadena escalar, cellstr o matriz de caracteres. ARCHIVO debe especificar una ruta absoluta o una ruta relativa: la ruta a un archivo con una extensión ".py", en relación con el directorio de trabajo actual. Si el archivo de secuencia de comandos requiere argumentos de línea de comandos, se pueden especificar proporcionándolos en ARCHIVO después de la ruta al archivo que se ejecutará, separados por caracteres de espacio.

Formato

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

ejemplo

# 定义num.py的函数

def print_num(num=1):
  print("执行print_num函数")
  return num

if __name__ == "__main__":
  b = print_num(3)
  print("hello world!")
 

Llamada en matlab, la ventana de línea de comando puede obtener el valor impreso por impresión:

% a string, cellstr or a char array
% 添加当前python的文件路径
py.sys.path().append('fun/to/path')

% 调用这个函数
pyrunfile("num.py")

inserte la descripción de la imagen aquí

3.2 [ OUTVARS ] = PYRUNFILE(ARCHIVO, SALIDAS)

[ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS) ejecuta el archivo y devuelve cualquier variable generada por Python a MATLAB especificando el nombre de la variable de Python en OUTPUTS y capturando el valor devuelto en OUTVARS. La salida se puede proporcionar como una cadena, cellstr o una matriz de caracteres.

Formato

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

ejemplo

# num.py

def print_num(num=1):
  return num

if __name__ == "__main__":
  b = print_num(3)

Llamado en matlab, no hay necesidad de importar esta función, el programa buscará automáticamente esta función:

% a string, cellstr or a char array
% 添加当前python的文件路径
py.sys.path().append('fun/to/path')

% 调用这个函数
myListFile = pyrunfile("num.py", "b")

inserte la descripción de la imagen aquí
denominador denominador, imag parte imaginaria, real parte real, numerador numerador

obtener más variables de retorno

# 已经定义的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!")
 

En el código anterior, definimos tres variables a, b y c, que todos queremos obtener, por lo que podemos usar el siguiente método:


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

Se puede encontrar que los valores de a y b se obtienen exitosamente, pero c no se logra, debe ser que c es una variable cuando es cero en la función print_num y no se puede obtener.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3.3 [ OUTVARS ] = PYRUNFILE(ARCHIVO, SALIDAS, varargin{ENTRADAS})

[ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS}) ejecuta el archivo y devuelve OUTPUTS, y los asigna a OUTVARS, usando los datos de MATLAB pasados ​​por varargin{INPUTS}. varargin{INPUTS} se puede usar para pasar datos de MATLAB a una expresión de Python en el formato: pares de nombre-valor, donde nombre es el nombre de la variable de Python que se va a asignar y valor son datos de MATLAB o un nombre de variable en un espacio de trabajo accesible. varargin{INPUTS} solo se puede usar para pasar datos que se pueden convertir automáticamente al formato python.

formato uno

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

transferir

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

inserte la descripción de la imagen aquí

formato dos

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

transferir:

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

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45248370/article/details/130905363
Recomendado
Clasificación