Detaillierte Erläuterung verschiedener Methoden zum Aufrufen von Python aus Matlab

Detaillierte Erläuterung verschiedener Methoden zum Aufrufen von Python aus Matlab

In MATLAB können Sie pyFunktionen verwenden, um Python-Module und -Funktionen aufzurufen. Auf dieser Basis können wir problemlos verschiedene Module in Python aufrufen, um unsere Anwendungssimulation im neuronalen Netzwerk zu erleichtern.

Im Folgenden sind die grundlegenden Schritte zum Aufrufen eines Python-Moduls mit MATLAB aufgeführt:

  1. Stellen Sie sicher, dass Ihr System Python korrekt installiert und Python zu den Systemumgebungsvariablen hinzugefügt hat.

  2. Verwenden Sie im MATLAB-Befehlsfenster pyversionden Befehl, um die derzeit von MATLAB verwendete Python-Version zu überprüfen. Stellen Sie sicher, dass es sich um die Version von Python handelt, die Sie aufrufen möchten.

  3. Verwenden Sie py.module_namedie Syntax, um Python-Module zu importieren. module_nameist der Name des Python-Moduls, das Sie aufrufen möchten.

  4. Rufen Sie eine Funktion oder Methode in einem Python-Modul auf. Verwenden Sie .Operatoren, um auf Funktionen und Methoden in einem Modul zuzugreifen.

1 Rufen Sie die benutzerdefinierte Python-Funktion auf

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

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

Beispiel

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

Fügen Sie hier eine Bildbeschreibung ein

2 Zugriff auf integrierte Python-Module

Um auf eine Python-Bibliothek zuzugreifen, stellen Sie dem Python-Namen das Präfix voran py..
Greifen Sie auf das Mathematikmodul zu:

% 引入Python模块
% py.math;

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

Fügen Sie hier eine Bildbeschreibung ein
Anrufliste, Textumbruch:

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

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

Fügen Sie hier eine Bildbeschreibung ein

3 Ausführen von Python-Skripten aus MATLAB

3.1 PYRUNFILE(DATEI)

PYRUNFILE(FILE) führt die Python-Skriptdatei FILE aus, die als Skalarstring, Cellstr oder Char-Array bereitgestellt werden kann. FILE muss einen absoluten oder einen relativen Pfad angeben – den Pfad zu einer Datei mit der Erweiterung „.py“, relativ zum aktuellen Arbeitsverzeichnis. Wenn die Skriptdatei Befehlszeilenargumente erfordert, können diese angegeben werden, indem sie in FILE nach dem Pfad zur auszuführenden Datei angegeben werden, getrennt durch Leerzeichen.

Format

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

Beispiel

# 定义num.py的函数

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

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

In Matlab aufgerufen, kann das Befehlszeilenfenster den Wert durch Drucken abrufen:

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

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

Fügen Sie hier eine Bildbeschreibung ein

3.2 [ OUTVARS ] = PYRUNFILE(DATEI, AUSGÄNGE)

[ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS) führt die Datei aus und gibt alle von Python generierten Variablen an MATLAB zurück, indem der Name der Python-Variablen in OUTPUTS angegeben und der Rückgabewert in OUTVARS erfasst wird. Die Ausgabe kann als String-, Cellstr- oder Char-Array erfolgen.

Format

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

Beispiel

# num.py

def print_num(num=1):
  return num

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

In Matlab aufgerufen, muss diese Funktion nicht importiert werden. Das Programm sucht automatisch nach dieser Funktion:

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

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

Fügen Sie hier eine Bildbeschreibung ein
Nenner Nenner, imaginärer Teil, realer Realteil, Zähler Zähler

Holen Sie sich mehr Rückgabevariablen

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

Im obigen Code haben wir drei Variablen a, b und c definiert, die wir alle erhalten möchten, sodass wir die folgende Methode verwenden können:


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

Es kann festgestellt werden, dass die Werte von a und b erfolgreich abgerufen wurden, c jedoch nicht. Es sollte sein, dass c eine Variable ist, wenn sie in der Funktion print_num Null ist und nicht abgerufen werden kann.

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

3.3 [ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS})

[ OUTVARS ] = PYRUNFILE(FILE, OUTPUTS, varargin{INPUTS}) führt die Datei aus, gibt OUTPUTS zurück und weist sie OUTVARS zu, wobei die von varargin{INPUTS} übergebenen MATLAB-Daten verwendet werden. varargin{INPUTS} kann verwendet werden, um MATLAB-Daten an einen Python-Ausdruck im Format Name-Wert-Paare zu übergeben, wobei Name der Name der zuzuweisenden Python-Variable und Wert die MATLAB-Daten oder der Variablenname in einem zugänglichen Arbeitsbereich ist. varargin{INPUTS} kann nur zur Übergabe von Daten verwendet werden, die automatisch in das Python-Format konvertiert werden können.

Formatieren Sie eins

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

überweisen

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

Fügen Sie hier eine Bildbeschreibung ein

Format zwei

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

überweisen:

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

Fügen Sie hier eine Bildbeschreibung ein

おすすめ

転載: blog.csdn.net/weixin_45248370/article/details/130905363