2010-02-13 34 views
22

一位朋友問我如何創建一個接受一些輸入的小型Web界面,將它們發送到MATLAB進行數字運算並輸出結果。我是一名Python/Django開發人員,所以我可以處理Web界面,但是在涉及到MATLAB時我毫無頭緒。具體來說:如何從Python與MATLAB交互?

  • 我會真的喜歡避免託管在Windows服務器上。使用Windows上創建的腳本在Linux中運行MATLAB的任何問題?
  • 我是否應該考慮將shell命令或編譯爲C並使用​​與它進行交互?
  • 如果編譯是要走的路,有什麼我應該知道的關於如何編譯和使用Python? (從C編譯或使用已經很長時間了)

如何解決這個問題的任何建議,提示或技巧?

+7

請注意,這將違反MATLAB許可證。也許如果你在一所大學,你會擺脫它,但是對於MATLAB來說,你需要每個_end用戶的許可證 - 也就是每個使用你的web界面的人。我試圖設置一些計算Web服務,並且我們被告知這個要求 - 最後,我們不得不使用Matlab編譯器來創建一個獨立的可執行文件,它沒有這個限制(或者完全切換到Python - Numpy/Scipy/Matplotlib提供一個相當全面的替代品)。 – robince 2010-02-13 10:57:37

回答

-1

也許你會找到有用的信息在這裏

PyMat - An interface between Python and MATLAB

+2

-1 - 抱歉,但這是真的過時了,並將prob有困難讓它建立(文檔仍然指數字)... mlabwrap是要走的路(積極維護和與最近的matlab一起工作) – robince 2010-02-13 10:54:58

12

看看mlabwrap,它允許您通過一個Python API

+1

I second mlabwrap。雖然,我更喜歡像numpy這樣的純Python解決方案,但我目前使用mlabwrap從文件中讀取一些數據,在Python中預處理它,然後發送到Matlab,然後獲取結果。 每次發出請求時,您都可能在開始Matlab環境時遇到開銷問題。 – 2010-02-13 10:57:43

+2

我也同意mlabwrap非常容易使用。但是,正如Amac所說,開銷非常顯着。爲了說明這一點,我使用的一個計算(function optimization.lsqlin)從matlab中調用它需要0.01秒的時間,但是使用mlabwrap從python調用它時使用相同的參數,它需要0.30秒才能完成。 – Spike 2010-02-16 00:28:24

+0

該項目的延續:[mlab](https://github.com/ewiger/mlab) – gaborous 2016-03-25 13:37:41

1

調用Matlab的關於操作系統的兼容性,如果你使用的MATLAB版本對於Linux,用windows編寫的腳本應該沒有任何改變。 如果可能的話,你也可以考慮用python做所有事情的可能性。 Matiplotlib的Scipy/numpy提供了一個完整的Matlab替換。

14

有一個python-matlab bridge這是唯一的,因爲Matlab作爲服務器在後臺運行,所以每次調用Matlab函數時都沒有啓動成本。

它只要下載和下面的代碼一樣簡單:

from pymatbridge import Matlab 
mlab = Matlab(matlab='/Applications/MATLAB_R2011a.app/bin/matlab') 
mlab.start() 
res = mlab.run('path/to/yourfunc.m', {'arg1': 3, 'arg2': 5}) 
print res['result'] 

其中yourfunc.m的內容是這樣的:

%% MATLAB 
function lol = yourfunc(args) 
    arg1 = args.arg1; 
    arg2 = args.arg2; 
    lol = arg1 + arg2; 
end