## 安裝
安裝最新版的Matlab,
```matlab
matlabroot
```
會返回Matlab root路徑,復制此路徑,將它記作A。在命令行中:
```shell
cd A/extern/engines/python
python setup.py install
```
安裝`matlab.engine`包。此時在python中可以調用m函數:
## 使用
#### 簡單的例子
在您的當前文件夾中名為 triarea.m 的文件中創建一個 MATLAB函數。
```matlab
function a = triarea(b,h)
a = 0.5*(b.* h);
```
```python
import matlab.engine
eng = matlab.engine.start_matlab()
ret = eng.tri(1.0,5.0)
```
注意,`matlab.engine`里面主要就是`start_matlab()`方法。
#### 通過 Python 調用 MATLAB 函數
從 MATLAB 函數返回輸出參數
您可以直接調用任何 MATLAB? 函數并將結果返回到 Python?。例如,要確定某個數是否為質數,請使用該引擎調用 isprime 函數。
```python
import matlab.engine
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)
True
```
從 MATLAB 函數返回多個輸出參數
當使用引擎調用函數時,默認情況下該引擎會返回單個輸出參數。如果您知道函數可能返回多個參數,請使用 nargout 參數指定輸出參數的數量。
要確定兩個數的最大公分母,請使用 gcd 函數。設置 nargout 以從 gcd 返回三個輸出參數。
```py
import matlab.engine
eng = matlab.engine.start_matlab()
t = eng.gcd(100.0,80.0,nargout=3)
print(t)
(20.0, 1.0, -1.0)
```
不從 MATLAB 函數返回任何輸出參數
有些 MATLAB 函數不會返回任何輸出參數。如果函數不返回任何參數,則將 nargout 設為 0。
通過 Python 打開 MATLAB 幫助瀏覽器。
```py
import matlab.engine
eng = matlab.engine.start_matlab()
eng.doc(nargout=0)
```
MATLAB doc 函數將打開瀏覽器,但不會返回輸出參數。如果您沒有指定 nargout=0,引擎將報告錯誤。
#### 在 Python 中使用 MATLAB 數組
matlab 包提供了構造函數以支持在 Python 中創建 MATLAB 數組。用于 Python 的 MATLAB 引擎 API 可以將此類數組作為輸入參數傳遞給 MATLAB 函數,并且可以將此類數組作為輸出參數返回給 Python。您可以從 Python 序列類型創建任何 MATLAB 數值或邏輯值類型的數組。
從 Python list 創建一個 MATLAB 數組。對該數組調用 sqrt 函數。
```py
import matlab.engine
eng = matlab.engine.start_matlab()
a = matlab.double([1,4,9,16,25])
b = eng.sqrt(a)
print(b)
[[1.0,2.0,3.0,4.0,5.0]]
```
引擎返回 b,它是 1×5 的 matlab.double 數組。
創建一個多維數組。magic 函數將一個二維 matlab.double 數組返回給 Python。使用 for 循環分行打印數組中的每行。(當看到 ... 提示時再次按 Enter 以關閉循環并打印。)
```py
a = eng.magic(6)
for x in a: print(x)
...
[35.0,1.0,6.0,26.0,19.0,24.0]
[3.0,32.0,7.0,21.0,23.0,25.0]
[31.0,9.0,2.0,22.0,27.0,20.0]
[8.0,28.0,33.0,17.0,10.0,15.0]
[30.0,5.0,34.0,12.0,14.0,16.0]
[4.0,36.0,29.0,13.0,18.0,11.0]
```
調用 tril 函數來獲取 a 的下三角部分。在一個單獨的行上打印數組中的每行。
```py
b = eng.tril(a)
for x in b: print(x)
...
[35.0,0.0,0.0,0.0,0.0,0.0]
[3.0,32.0,0.0,0.0,0.0,0.0]
[31.0,9.0,2.0,0.0,0.0,0.0]
[8.0,28.0,33.0,17.0,0.0,0.0]
[30.0,5.0,34.0,12.0,14.0,0.0]
[4.0,36.0,29.0,13.0,18.0,11.0]
```
matlab數組在python中是list或者tuple。