一文讀懂如何用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程序,並返回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