一文读懂如何用python调用matlab函数(windows环境)

第一步配置环境;

要安装引擎 API,请在操作系统提示符下执行以下命令,其中 matlabroot 是 MATLAB 文件夹的路径。您可能需要管理员权限才能执行这些命令。或者,使用在非默认位置安装用于 Python 的 MATLAB 引擎 API 中所述的非默认选项之一。

在 Windows 系统中 管理员cmd输入:

cd "matlabroot\extern\engines\python"
python setup.py install

上述matlabroot是matlab安装路径,上述操作就是进入到matlab安装路径下的\extern\engines\python文件夹,进行python setup.py install编译,在此之前,您需要对python环境已配置全局变量。

第二步,熟悉python与matlab交互的API:

1. python提供的交互matlab函数:

一、在python中启动matlab:

matlab.engine.start_matlab()

意义:启动一个新的MATLAB进程,并返回Python的一个变量,它是一个MatlabEngine对象,用于与MATLAB过程进行通信。

例子:

1)在python调用matlab脚本(.m文件)

matlab脚本(.m文件)与python文件得放在同一个文件夹下面;

新建一个count.m的matlab文件,简单一点,在里面就写个:

1+2

再新建一个test.py的python文件,源码为: 

import time
import matlab.engine
eng = matlab.engine.start_matlab()
eng.count(nargout=0)
time.sleep(10)

在当前工作目录打开cmd或powershell,输入python test.py运行python脚本。

最实用的是用python调用matlab函数(function):

例子:

新建一个matlab脚本,count.m

function a = count(c,d)
a = c+d;

新建一个python脚本,test.py

import matlab.engine
eng = matlab.engine.start_matlab()#可以为所欲为的调用matlab内置函数
a = eng.count(1.0,2.0) #引用自写的脚本
print(a)
b = eng.sqrt(4.) #引用matlab内置函数
print(b)

结果;

同样,matlab启动函数也可以加入参数:

matlab.engine.start_matlab("-desktop"); #直接打开matlab桌面软件
matlab.engine.start_matlab(async=True); #异步操作matlab函数库,
matlab.engine.start_matlab(background=True); #同步或异步启动MATLAB,指定为逻辑关键字参数。 background是async的别名,将在以后的版本中删除。

跑一遍matlab.engine.start_matlab(async=True)了解一下;

例子3:

import matlab.engine
future = matlab.engine.start_matlab(async=True)
a = future.result()
a.sqrt(4.)

输出结果如下:

将matlab的workspace的变量复制到python变量中:

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval('a = pi;',nargout=0)
mpi = eng.workspace['a']
print(mpi)

结果:

3.14159265359

二、查找与连接matlab回话

matlab.engine.find_matlab()

意义: 在本地计算机上查找所有共享的MATLAB®会话,并在元组中返回它们的名称。名称中的任何名称都可以是matlab.engine.connect_matlab的输入参数。如果本地计算机上没有运行共享会话,则matlab.engine.find_matlab将返回一个空元组。

matlab.engine.connect_matlab(name=None)

意义: 连接到共享的MATLAB®会话,名称,并返回一个MatlabEngine对象作为eng。输入参数名称指定已在本地计算机上运行的MATLAB会话的名称。

也可以通过matlab会话的名字来连接:

import matlab.engine
names = matlab.engine.find_matlab()
names

在另一个powershell或cmd输入:

import matlab.engine
eng = matlab.engine.connect_matlab('获取到的名字编号')
eng.sqrt(4.0)

参考文献:

[1] http://ww2.mathworks.cn/help/matlab/matlab_external/install-the-matlab-engine-for-python.html?ue

[2] http://ww2.mathworks.cn/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html

[3] http://ww2.mathworks.cn/help/matlab/matlab-engine-for-python.html

[4] http://ww2.mathworks.cn/help/matlab/apiref/matlab.engine.matlabengine-class.html

猜你喜欢

转载自blog.csdn.net/lanluyug/article/details/84100233