一文读懂如何用python调用matlab函数(windows环境)
第一步配置环境;要安装引擎 API,请在操作系统提示符下执行以下命令,其中matlabroot是 MATLAB 文件夹的路径。您可能需要管理员权限才能执行这些命令。或者,使用在非默认位置安装用于 Python 的 MATLAB 引擎 API中所述的非默认选项之一。在 Windows 系统中 管理员cmd输入:cd "matlabroot\extern\engines\py...
第一步配置环境;
要安装引擎 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:
(注意python版本与matlab版本兼容性问题,比如python3.7大多数matlab版本都是不支持的,尽量用python3.5或者3.6)
1. python提供的交互matlab函数:
一、在python中启动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
[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
更多推荐
所有评论(0)