2012-06-21 90 views
10

我將很快開始一個最後一年的工程項目,包括在2D表面上移動的對象的實時跟蹤。對象將通過我的算法使用feature extraction進行註冊。對象跟蹤:MATLAB vs. Python Numpy

我想做一些研究,以決定我應該使用MATLAB還是使用Python Numpy(數值Python)。一些我考慮的因素:

1)經驗

我有兩個合理的經驗,但使用NumPy的圖像處理或許更多的經驗。不過,我總是發現MATLAB非常直觀,易於拿取。

2)實時能力

這是非常重要的,我的選擇是能夠支持實時採集視頻數據從外部攝像頭。我發現這個鏈接MATLAB顯示如何做到這一點。我相信Python也可以使用OpenCV庫嗎?

3)性能

我聽說過,但從來沒有使用過,那MATLAB可以很容易地跨越multiple cores拆分獨立計算。我應該認爲這會非常有用,而且我不確定Numpy是否同樣簡單。

4)價格

我知道,有一個與MATLAB相關的成本,但我會在一所大學合作,因此將有機會獲得全MATLAB無需任何費用,以自己,所以價格不是因子。

我非常感謝來自任何人的任何輸入,這些輸入來自任何類似的人,以及您的經歷。 謝謝!

+2

就畢業後就業能力而言,我認爲如果打算練習工程,Matlab是一個更好的選擇。 –

+2

我認爲這取決於你在哪裏工作。更好地瞭解兩者。 – Benjamin

回答

7

Python(帶有NumPy,SciPy和MatPlotLib)是新的Matlab。所以我強烈建議Python通過Matlab。

我在一年前做了改變,我對結果非常滿意。

這是Python和Matlab的

Python的利弊短PRO/CON列表:

  • 面向
  • 易對象寫入大和 「真實」 的節目
  • 開源(所以它完全免費使用)
  • 快速(大多數繁重的計算算法有一個python包裝來連接C庫,例如NumPy,SciPy,SciKits,libSVM,libLINEAR)
  • 舒適的環境,高度可配置(iPython,用於VIM的Python模塊,...)
  • 快速增長的Python用戶社區。文檔和人民願意噸,以幫助

Python的缺點:

  • 可能是一個痛苦的安裝(尤其是在OS X某些模塊)
  • 繪圖操作是不是一樣好/容易,因爲在MATLAB,尤其是3D繪圖或動畫
  • 它仍然是一個腳本語言,所以只將其用於(快速)原型
  • Python是不是專爲多核編程

Matlab的優點:

  • 非常容易安裝
  • 強大的工具箱(例如信號處理,系統生物學)
  • 統一的文件,只要你購買了許可證個性化的支持
  • 輕鬆擁有劇情動畫和交互式圖形(我發現與運行實驗非常有用)

Matlab的利弊:

  • 沒有免費的(且昂貴)
  • 基於Java + X11,這看起來非常醜陋的(好吧,我承認我在這裏完全偏向)
  • 難寫大,可擴展的計劃
  • 很多MATLAB用戶都切換到Python :)
+3

謝謝!我今天和更多的人交談過,似乎我會用Python。 – casper

+0

我很高興聽到這個消息。快樂編程! –

5
  1. 如果您對這兩種語言都有經驗,那麼這不是一個真正的決策標準。

  2. 由於大多數計算機視覺算法的代價非常高,所以Matlab在實時設置方面存在問題。這是使用經過試用和測試的庫(如OpenCV)的優勢,其中許多算法將被高效地實現。 Matlab提供了將代碼編譯成Mex文件的可能性,但這是很多工作。

  3. Matlab具有並行for循環parfor,這使多核處理變得容易(或至少更容易)。但問題是如果這足以實現實時速度。

  4. 無評論。

  5. Matlab的主要優點是,由於其良好的文檔,您將非常快速地獲得正在運行的程序。 但是我發現代碼的可重用性與Matlab很差,除非您非常重視它。

我認爲最後的決定必須是如果您有/可以運行你的算法的實時這是我在Matlab的懷疑,但是這取決於你打算用什麼方法。

+0

感謝您的輸入!但是,當你說Matlab的代碼可重用性很差時,你是什麼意思?爲什麼這樣? – casper

+2

許多人傾向於使用腳本太多,在我看來,由於名稱衝突和依賴關係,重用這些代碼非常困難。另外,很難執行數據結構(例如輸入數據),這意味着大多數用戶將不得不找出他們必須如何構造輸入數據(它是行或列向量?等等)。我並不是說重複使用好的Matlab代碼是不可能的,但是有很多糟糕的代碼,人們在編碼時往往不會考慮可重用性。 – denahiro

7

我會推薦python。

我從MATLAB切換到 - > python約1/2的方式通過我的博士學位,並不後悔。在最簡單的情況下,python是一個更好的語言,有真實的對象,等等。

如果您希望在c/C++中執行代碼的任何部分,我肯定會推薦python。 mex接口的工作原理,但如果你的構建變得複雜/大,它開始是一個痛苦,我從來沒有理清如何有效地調試它。我也很難用mex +分配與matlab內存管理交互的大塊(我無法解決這個問題是什麼促使我切換)。作爲一個便箋/自我推廣,我有c++(與swig包裝)和純粹python Crocker-Grier。

4

其他人已經做出了很多偉大的意見(我在另一個答案https://stackoverflow.com/a/5065585/392949之前opined關於這一主題),但我只想指出,Python具有許多非常優秀的並行計算工具,可以跨多個內核分割工作。下面是一個簡短而絕不是全面的列表:

你也很可能會發現用Cython要多對比一下Matlab的所提供的是一個大大優於工具如果您需要連接外部C庫或編寫C擴展,並且內置了優秀的numpy支持。

這裏有一個包含其他選項的列表: http://wiki.python.org/moin/ParallelProcessing