文章目錄
- 一、簡介
- 二、安裝matlab.engine
- 2.1、基于 CMD 安裝
- 2.2、基于 MATLAB 安裝(不建議)
- 三、python調用matlab函數(內置 + 自定義)
一、簡介
matlab.engine(MATLAB Engine API for Python)
:是 MATLAB 提供的一個 Python 接口,允許你在 Python 環境中與 MATLAB 進行交互。通過 matlab.engine,你可以在 Python 中啟動 MATLAB 引擎,調用 MATLAB 函數,傳遞數據,以及執行 MATLAB 腳本和命令。
主要功能:
- 啟動 MATLAB 引擎:在 Python 中, 使用
matlab.engine.start_matlab()
啟動 MATLAB 引擎,并通過該引擎執行命令。- 調用 MATLAB 函數:在 Python 中,直接調用 MATLAB 的內置函數或自定義函數(.m),例如:
result = eng.sqrt(16.0)
- 數據傳遞:支持在 Python 和 MATLAB 之間傳遞數據,包括數組、矩陣、字符串等。例如:
y = eng.my_function(x=[1.0, 2.0, 3.0])
- 執行 MATLAB 腳本或命令: 可以通過
eng.eval("disp('Hello from MATLAB!')", nargout=0)
來執行 MATLAB 腳本或命令。- 關閉 MATLAB 引擎:: 執行完任務后,使用
eng.quit()
關閉 MATLAB 引擎。
優勢:
- MATLAB 與 Python 的結合:可以將 Python 的優勢與 MATLAB 強大的數學計算、符號計算、數據分析等功能相結合,進行更復雜的分析。
- 科學計算和模擬:在 MATLAB 中進行數值計算和建模,再將結果傳遞到 Python 中進行可視化和進一步分析。
- 方便的調試和交互:可以在 Python 環境中實時調試 MATLAB 代碼,快速驗證和測試。
- 多平臺支持:matlab.engine 支持多種操作系統,包括 Windows、Linux 和 macOS。
二、安裝matlab.engine
2.1、基于 CMD 安裝
- (1)打開 CMD 命令提示符,并指定 Python 環境,用于與 MATLAB 引擎綁定:若需要激活環境,則執行以下代碼:
conda activate py39
,其中 py39 為指定的虛擬環境名稱。- (2)切換到 MATLAB 安裝路徑下的 extern\engines\python 目錄:
cd D:\MATLAB2023b\MATLAB\R2023b\extern\engines\python
- (3)在當前目錄下創建安裝目錄(可選):
mkdir dist
- 通常 setup.py 會自動創建 dist 目錄,若沒有,則需要手動創建以避免錯誤。
- 備注:可以在查看 MATLAB 安裝目錄時,確認是否存在 dist 目錄而決定。
- (4)開始安裝
- 最經典方法(已棄用,但仍可使用):
python setup.py install
。系統將警告提示:SetuptoolsDeprecationWarning: setup.py install is deprecated.- 使用 pip 安裝(最新方法):
python -m pip install .
。該命令將從當前目錄安裝,而 setup.py 文件通常會在同一目錄下。- 如果遇到權限問題,使用 --user 參數安裝到用戶本地目錄,而不是全局安裝:
python setup.py install --user
2.2、基于 MATLAB 安裝(不建議)
打開 MATLAB 命令窗口,輸入以下命令來安裝:
cd (fullfile(matlabroot,'extern','engines','python'))
system('python setup.py install')
- 報錯提示:若返回
9009
,表明命令未成功運行。- 原因分析:由于命令行找不到 python 或者路徑配置有問題。—— 當 system 調用 python 命令時,MATLAB 依賴系統環境變量 PATH 來定位 Python。如果 Python 沒有被正確添加到環境變量中,會導致找不到 python 命令,從而報錯。
- 解決方法:將 setup.py 替換為 MATLAB 安裝目錄
三、python調用matlab函數(內置 + 自定義)
一文讀懂如何用python調用matlab函數(windows環境)
啟動和關閉 MATLAB 引擎是一個較為耗時的操作,若需要頻繁調用MATLAB函數,可以將啟動 MATLAB 引擎提取到外部函數中,以實現只啟動一次。
import matlab.engineeng = matlab.engine.start_matlab() # 啟動 MATLAB 引擎
#########################################################################################
print("調用 MATLAB 版本號: ", eng.version()) # 獲取 MATLAB 版本號
print("調用 MATLAB 內置函數: ", eng.sqrt(4.0))
print("調用 MATLAB 腳本文件(.m): ", eng.count(1.0, 2.0))
#########################################################################################
eng.quit() # 關閉 MATLAB 引擎"""3調用 MATLAB 版本號: 23.2.0.2365128 (R2023b)
調用 MATLAB 內置函數: 2.0
調用 MATLAB 腳本文件(.m): 3.0
"""
- 若調用腳本文件(自定義函數),則(.m)與(.py)必須在同一個文件夾下。
- 有趣的現象,MATLAB打印結果也會在 Python 中顯示。
- 若在非綁定的 Python 環境下運行,則異常提示:
ModuleNotFoundError: No module named 'matlab'
function a = count(c, d)% 輸入參數: c 和 d% 輸出參數: aa = c + d; % 函數執行功能disp(a); % 顯示輸出結果
end