您的位置:

Matlab调用Python程序实现高效编程

一、背景介绍

Matlab和Python是现今非常流行的编程语言,分别适用于数学计算和科学计算领域。而且都有大量的库可以使用。但是在某些情况下,我们需要同时使用这两种语言。例如,当需要对Matlab处理后的数据进行后续的机器学习分析时,可以借助Python中机器学习库的强大能力。

因此,将Matlab和Python组合使用是很有必要的。届时,Matlab需要调用Python程序,而Python程序需要返回数据到Matlab中。在本文中,我们将介绍如何通过Matlab调用Python程序实现高效编程,以便更好地利用两种语言的优势。

二、Matlab调用Python方法

1、使用系统调用

一种最简单的方式是使用系统调用将Python程序直接作为一个命令行操作来执行。这种方法虽然简单,但不够灵活,也无法直接获得Python程序的返回值。下面是一段演示代码:

cmd = 'python "C:/test.py"';
dos(cmd);  %直接在Matlab中执行dos调用

此时,Python程序将作为一个外部命令,在Matlab中通过cmd字符串进行调用,其中“C:/test.py”表示Python程序所在的路径。

2、使用MATLAB Python,Python插件

Matlab具有与Python互动的接口——MATLAB Python。MATLAB Python插件是Matlab中的一个工具箱,它可以与Python安装在同一台计算机上,使Matlab和Python可以进行互动。前提是首先安装Python的工具包——Python Engine,这个工具包可以让Matlab与Python进行通信。

安装完成Python Engine后,就可以在Matlab中调用Python程序。需要注意的是,在Python程序开始时,需要导出Matlab的API。

Matlab 程序:

%通过Matlab Python调用Python程序
python_path='C:\Python39\python.exe'; %设置 Python 所在路径
if count(py.sys.path,'') == 0
    insert(py.sys.path,int32(0),''); %添加默认系统路径
end
%使用 Python 版本 >= 3.6 时使用此更新 API 的新方法
pymodule = py.importlib.import_module('test');
py_temp = pymodule.A; %调用 Python 函数
A = double(py.array.array('d',py.numpy.nditer(py_temp))); % 将 Python "numpy.ndarray" 转换为 double 数组

Python程序:

import numpy as np
import matlab.engine

def test(m,n):
    B = np.array([[i+j for i in range(m)] for j in range(n)],dtype=np.float64) #生成一个 m*n 的数组
    return B
if __name__ =="__main__":
    eng = matlab.engine.connect_matlab() #创建链接对象
    eng.workspace['A'] = test(3,4)      #将 test 函数返回值存入 "A" 变量

三、Python程序返回值到Matlab

在上面的例子中,Python程序执行的结果还存在Matlab的一个变量A中。可以看到,Python程序的执行结果已经在Matlab中得到了处理。Matlab中的数组完全可以在Python程序中使用。但是,需要注意的是数组的类型和大小需要跨语言保持一致。

除此之外,可以将Python程序的返回值存入一个文件中,供Matlab读取。这种方法比较灵活,在Matlab和Python之间传递数据、文件时最常用。

Python程序将数据保存到文件中,Matlab程序再读取该文件,以完成与Python之间的数据传递。以下是一个示例:

Python程序:

import numpy as np

def test(m, n):
    B = np.array([[i+j for i in range(m)] for j in range(n)], dtype = np.float64)
    np.savetxt('output.txt', B, fmt = '%.4f')
    return
if __name__ =="__main__":
    test(3, 4)

Matlab程序:

%读取Python程序保存的文件
data = load ('output.txt');
A = data;

总结

本文介绍了通过Matlab调用Python程序的方法,可以通过系统调用、MATLAB Python和Python插件等方式将两种语言结合起来使用,并且介绍了如何将Python程序的返回值传递到Matlab中。这种方法可以更加高效地使用两种语言的优势。在实际应用中,需要根据实际情况进行选择,尽量使得Matlab和Python的优势得到最大的发挥。