使用python調(diào)用MATLAB運(yùn)行.m函數(shù)(方便白嫖大佬們的開源資料)
為啥要寫這個(gè)專欄?
因?yàn)楹脽o聊啊啊啊啊?。╞ushi),因?yàn)榻裉靹偤糜玫搅?,有一個(gè)算法有了matlab算法可是改寫成python難度很大,但是整個(gè)項(xiàng)目又必須用python進(jìn)行后續(xù)處理,這時(shí)候就需要學(xué)會(huì)如何使用python調(diào)用matlab,學(xué)會(huì)如此就可以實(shí)現(xiàn)python和matlab之間的反復(fù)橫跳,只要把matlab的算法用函數(shù)封裝起來就可以輕易利用被python利用。如此一想,只需要找到二者中的任何一個(gè)開源算法就可以用為我所用(baipoiao),爽翻了有木有??!
好啦好啦,下面分享環(huán)節(jié):
第一步:安裝好python和matlab,對兩個(gè)軟件的版本有要求,對應(yīng)關(guān)系如下圖:
?

第二步:安裝MATLAB Engine引擎:
在matlab安裝目錄下找到如下文件夾:
?

在Ananconda promote中:cd加文件夾路徑如下圖
?

敲回車后,再輸入自己的根目錄磁盤,我的是E盤,就輸e:
運(yùn)行文件下的.py文件,python setup.py install
如果報(bào)錯(cuò)建議先檢查python的環(huán)境變量:https://jingyan.baidu.com/article/48206aeafdcf2a216ad6b316.html
?
第三步:用如下代碼啟動(dòng)matlab
# 導(dǎo)入matlab engine
?import matlab.engine
eng = matlab.engine.start_matlab()??#啟動(dòng)matlab engine
#如果需要使用自己編寫的.m文件需要cd到對應(yīng)的文件夾目錄下
eng.cd('(.m文件夾位置)',nargout=0)???
????add?=eng.(函數(shù)名)(?參數(shù) );????#調(diào)用matlab中函數(shù)
eng.quit()
實(shí)例如下:
Matlab函數(shù)
function [a, b, c] = abc(x, y)
%返回三個(gè)結(jié)果
a = x+y;
b = x*y;
c = x/y;
%要返回的值賦值給返回值變量
?
Python函數(shù)
import matlab.engine
eng = matlab.engine.start_matlab()
ret = eng.xyz(1, 2, nargout=3)
#返回三個(gè)結(jié)果
x, y ,z = ret
print(x, y, z)
eng.quit()
結(jié)果為:3 2 1
注意:python傳入matlab時(shí)參數(shù)會(huì)進(jìn)行相對應(yīng)的映射,這個(gè)很重要如果報(bào)錯(cuò)建議print出對應(yīng)變量的type,觀察后再進(jìn)行轉(zhuǎn)換數(shù)據(jù)類型修改代碼,附上官方文檔
https://ww2.mathworks.cn/help/matlab/matlab_external/pass-data-to-matlab-from-python.html
?
最后附上成功調(diào)用matlab engine引擎截圖:

說明:這里將python中PCG_resampled數(shù)組的數(shù)據(jù)類型轉(zhuǎn)換成雙精度類型的列表傳給matlab,運(yùn)行HsMM_PCG函數(shù)后返回給python后又轉(zhuǎn)換成np.array進(jìn)行后續(xù)處理。
分享到此結(jié)束,(dalao,點(diǎn)個(gè)贊再走啊啊?。?/p>