如何使用Python調用MATLAB函數

如何使用Python調用MATLAB函數


R2017b之前的版本支持py2.7-py3.5,R2017b以及之後可支持py3.6

安裝python關於MATLAB的擴展包

切換目錄至 ~MATLAB\\R2018b\\extern\\engines\\python,執行下面命令

其中~MATLAB為MATLAB的安裝目錄

#非默認目錄下安裝,並把安裝信息存至D:\\MatlabForPython\\files.txt
python setup.py build --build-base="D:\\MatlabForPython" install --record D:\\MatlabForPython\\files.txt
#默認目錄下安裝
python setup.py install

準備工作

matlab文件 getFromMat.m

function a = getFromMat(x)
a=[1 2 3; 4 5 6]
x

導入包,並啟動MATLAB引擎

>>> import matlab.engine
>>> eng=matlab.engine.start_matlab()

python獲取MATLAB的執行結果

需要將得到的值進行轉化,才能得到array類型的數據

>>> mat=eng.getFromMat(1)
a =
1 2 3
4 5 6
x =
int64
1
>>> np.array(mat._data).reshape(mat.size[::-1]).T
array([[1., 2., 3.],
[4., 5., 6.]])

將python數據傳入MATLAB函數

>>> aa=np.arange(9).reshape(3,3)
>>> bb=matlab.int8(aa.tolist())
>>> data=eng.triarea(bb)
a =
1 2 3
4 5 6
x =
3x3 int8 矩陣
0 1 2
3 4 5
6 7 8

完整代碼

import matlab.engine
import numpy as np
eng=matlab.engine.start_matlab()
#得到matlab執行結果,並轉化為array數據
mat=eng.getFromMat(1)
pymat=np.array(mat._data).reshape(mat.size[::-1]).T
#將array數據轉化為matlab.int,並傳入matlab引擎
aa=np.arange(9).reshape(3,3)
bb=matlab.int8(aa.tolist())
data=eng.triarea(bb)
#關閉matlab引擎
eng.quit()



分享到:


相關文章: