在 python 上使用 matlab、octave
師:「那個誰,幫我把這幾隻 matlab 程式轉 python」
「……老師你是嫌 matlab 太貴要轉移陣地嗎?」
「不要管那麼多!」
「老師那改成能在 python 使用 matlab 的功能好不好?」
「…好,交給你了」
在 python 上使用 octave
octave 簡單來說就是 matlab 的簡化版,雖然語法上完全相容,也有自己的 packages,但沒有 matlab 的豐富。 octave 是自由軟體。
這裡推薦使用的 package 是 oct2py,已有7年多的歷史,且近期還有在維護,使用上也很簡單。
安裝方式 pip install oct2py
,他另外還有 conda install -c conda-forge oct2py
,如果有用 conda 的可以考慮。
此外,這個套件僅支援 octave 4.0 以上(含)的版本,經測試目前最新的 5.2.0 可以使用。
在你安裝好 oct2py 後還不能直接使用,要先確定 C:\Octave\Octave-5.2.0\mingw64\bin
中有沒有一個 octave-cli.exe
檔案,如果有再將C:\Octave\Octave-5.2.0\mingw64\bin
加入系統環境變數中
再來準備範例檔案(需擺在同一目錄下)
- t.m
function d = t(x,y)
out1 = x+y
out2 = x*y
disp(out1)
disp(out2)
d=[out1,out2]
- test_octave.py
from oct2py import octave, Oct2PyError, Oct2Py
octave.ones(3) # 執行 octave 原生函式
try:
t = octave.t(3, 9) # 執行 function
print(t)
print(t[0])
print(t[0][0])
except Oct2PyError as e:
print(str(e))
剩下的進階功能請直接去 官方文件infomation、官方文件examples 看吧!
在 python 上使用 matlab
matlab engine 目前 只能在 python 2.7, 3.6, 3.7(詳細支援名單看這)。
當你安裝好 matlab 後,在 C:\Program Files\Polyspace\R2019a\extern\engines\python
(R2019a 是看你安裝哪個版本)
中找到 setup.py,並在此資料夾以工作管理員打開 cmd 或 powershell
打開 cmd 或 powershell 後,在裡面輸入 python setup.py install
來安裝。
環境準備好了,接下來準備要用的檔案(需擺在同一目錄下)
- test.m
function out1,out2 = t(x,y)
out1 = x+y
out2 = x*y
disp(x)
disp(y)
disp(out1)
disp(out2)
- test_matlab.py
import matlab
import matlab.engine
eng = matlab.engine.start_matlab()
out1,out2 = eng.test(2.0, 3.0,nargout=2)
print(out1)
print(out2)
eng.mod(5,3) # matlab 原生 function
test.py 重點有4個
out1,out2 = eng.test(2.0, 3.0,nargout=2)
test.m 中的函式名稱是 “t”,但
eng.text
是用檔名來判斷引用的來源,所以要用檔名當來源。nargout=2
,這個是代表你有幾個返回的回傳值,就要改成對應的數字,不然只會返回第一個。eng.mod(5,3)
,matlab 內建函式(比如這裡的mod)可以直接用這樣的方式呼叫。test.m 的 disp() 沒有效果
以上是最基礎的用法
後面還有共用 matlab session 的 matlab.engine.find_matlab 跟 matlab.engine.connect_matlab 方法
以及啟動 async 的 matlab.engine.start_matlab(async=True)
更多 method 請看這裡,因為很少場合會用就不介紹了。