Python對比Matlab,有什麼決定性的優勢?

如題,小博士一名,在做一些推薦演算法、主題模型方面的東西。之前一直用Matlab比較多,也做過一些和C、java的混編,感覺還比較順手。但最近聽好多人推薦Python,請問Python和Matlab對比,有什麼主要的優劣勢嗎?不論是研究生期間還是畢業後的工程應用中。是否有必要去主動學學Python呢?

感謝指導~


Python的優勢:

  • Python相對於Matlab最大的優勢:免費。但既然你已經能用上Matlab,想必不在乎這個了。

  • Python次大的優勢:開源。你可以大量更改科學計算的演算法細節。

  • 可移植性,Matlab必然不如Python。但你主要做Research,這方面需求應當不高。
  • 第三方生態,Matlab不如Python。比如3D的繪圖工具包,比如GUI,比如更方便的並行,使用GPU,Functional等等。長期來看,Python的科學計算生態會比Matlab好。
  • 語言更加優美。另外如果有一定的OOP需求,構建較大一點的科學計算系統,直接用Python比用Matlab混合的方案肯定要簡潔不少。
  • 畢竟是通用的編程語言,做做Web,搞個爬蟲,編個腳本,寫個小工具啥的用處廣。要說非得用Matlab幹麼也成,只是……

Matlab的優勢:

  • Community. 既然你們實驗室用Matlab,說明搞你們這個領域的大部分學者可能都用Matlab。交流起來必然更加方便。
  • Simulink, 只能說這是個良心作品,不過題主好像用不著……
  • Matlab本來號稱更快,但實際上由於Python越來越完善的生態,這個優勢已經逐漸喪失了。這裡有一個迭代有限差分法計算2D拉普拉斯方程的對比(500x500的grid,100次迭代),可以參考一下。

Type of solution : Time taken (sec)

Python (estimate) : 1500.0

Python + Psyco (estimate) : 1138.0

Python + NumPy Expression : 29.3

Blitz : 9.5

Inline : 4.3

Fast Inline : 2.3

Python/Fortran : 2.9

Pyrex : 2.5

Matlab (estimate) : 29.0

Octave (estimate) : 60.0

Pure C++ : 2.16

數據來自PerformancePython -

  • Legacy優勢。你以前的代碼都是Matlab寫的,自己Matlab用的也熟,換成新的話,總得看一堆書吧,總得出一堆bug吧,總得踩一堆坑吧。這段時間也是Matlab的優勢。或許本來這段時間可以再出一些活呢。畢竟目的是Research,這些工具都是幫忙驗證idea的罷了。

1. 代碼可讀性高

2. 易維護

3. 跨平台

4. 免費!!

5. 第三方庫數量多,質量不錯

6. scipy和numpy配合使用性能不錯,pylab等plot出來的圖像也不錯


最大的優勢:免費。MATLAB正版死貴(當然天朝貌似暫時不用擔心這個問題),因此我要說說第二大優勢了。

第二大優勢: 全能。MATLAB擅長數據分析,數學建模,其他方面就屬於邊緣功能了,即使有,也比較弱。python可以做任何計算機能做的事,比如數據爬取,數據清洗, 數據分析,網路展示,一條龍包辦。


Python相比於Matlab的最大優勢是:Python是一門通用編程語言,實現科學計算功能的numpy、scipy、matplotlib只是Python的庫和Package而已,除此之外Python還有用於各種用途的庫和包,比如用於GUI的PyQt和wxPython,用於Web的Django和Flask

Matlab相比於Python最大的優勢是:它專門就是給數值計算開發的,在數值計算這個領域庫最多、用的人最多、出的書最多,總之算是最好的,,不過出了數值計算這個領域,基本上應該就沒人用Matlab了吧


python除了科學計算方面還有很多應用,matlab則主要是科學計算與建模。python應用範圍比較廣是它的優勢,matlab在科學計算信號處理方面有很多成熟的模塊可供調用。

各有優勢。


一個是工具,一個是通用語言,不好比。


通過你的描述,猜到你應該不是CS及相關專業的。對於你建模計算的需求MATLAB足夠了,沒有必要再花時間去學新的語言,反正你又不是cs的人。當然你要是有編程的愛好可以去學學。說點形象的,你可以這麼理解Python是編程語言,MATLAB有點像office裡面的宏,針對性很強。


Python對我而言最大的優點就是………安裝方便!!相比起matlab幾個G的安裝包。如果只是想簡單處理處理數據,或者寫一個小程序,很快就能上手。而且擴展性也比Matlab強。面向對象感覺也要比Matlab強大。


讀到博士,就玩MATLAB吧,要看的東西太多,老闆還在後面催命,沒有編程愛好,就是想做演算法,MATLAB能讓你多睡一會。說不定還能幫你省出個約妹子談理想的時間


matlab 不僅僅只是研究演算法的工具,對於汽車電子,好多控制策越都是matlab simulink 出模型 然後直接生成C代碼給ECU


這種類型的問題在知乎甚至很多編程論壇里提及的很多。我們很多人搞不清楚Matlab到底是幹什麼的。你想啊,搞研究的和學生哪有那麼多時間造輪子(非編程人員,如果你覺得自己牛逼,可以慢慢造)。很多讀碩士博士的研究生為了實現演算法或模擬,直接用Matlab,因為Matlab已經造好了很多工具和材料,你只需要像玩樂高積木一樣搭建自己的東西就好,省了大量的時間精力去DEBUG,使得很多研究者能夠直奔主題,直搗龍穴。如果Matlab驗證完演算法模擬後,表明沒問題,然後再用其他語言從基礎開始砌磚。這對研究者是偉大的幫助。很多時候面對一個項目,時間精力錢這些都是資源啊,牛逼的Matlab已經進化到可以生成C++代碼。何樂而不為呢。如果本身就是搞計算機的,愛怎麼造輪子無所謂,但是如果本職並不是的話,還是先老老實實把核心東西搞出來,再移植吧。畢竟畢業時候你用好幾倍的精力時間搞出C++或python代碼,和Matlab代碼相比,對論文的貢獻沒那麼大。答辯委員會只會分析你的演算法或模擬內容。很多導師會認為你不就是在Matlab的基礎上用C++或python完善了一下嗎,這和碼農有什麼區別?


這是釣魚還是真傻?怎麼去對比?題主你就告訴我,你想怎麼去對比?

如果同樣的問題,你要去問建築設計師,木頭和混凝土比,有什麼優勢,這才算公平呢。

拋開應用價值去談技術優劣都是耍流氓!

又看了一下問題描述……果然在這個行業里,傳統的大學教育令人堪憂。

知乎,智乎?


我十分不解,為什麼這麼多人說python的優勢是免費啊?在天朝難道你們用的是正版matlab?!?!


默默地說一點Matlab的好話吧,不用自己裝第三方庫,這點Python雖然有pip但是還是有各種問題,答主用的是anaconda的發行版,給spyder升了個級就打不開了T^T穩定性太差了


Python是一種語言而matlab不是,當你是在做工程而不是做研究的時候就能體會到這巨大的差別。


對excel讀寫,matlab 真是日了狗,各種奇怪錯誤,python 完美支持。

除他除了免費沒發現什麼優勢,反正我的日常matlab就足夠了。


再加一個是: 不要錢。matlab的license貴,個人如果不在學校是不會去買的。中小企業也不見得願意掏錢去買


本科玩數學建模用matlab和Mathematica,現在轉到python+Mathematica,說說我的想法吧。首先什麼便宜我們就不說了,大家都懂。如果是做純研究,擼演算法,發paper啥的,matlab可以讓你省很多事情,可以讓你不必要關心很多細節,simulink強悍到不行不行的。但是反之,如果matlab要做一些實際一點的東西,就比較麻煩了。比如舉個栗子,如果你擼了一個新的數據挖掘演算法出來,發個paper,matlab再好不過了。但是如果你想把這個演算法用在你的自己blog上,去分析你每天通過爬蟲挖掘下來的數據,然後做個可視化展現啥的,matlab基本就別想了,這種時候python就是個絕佳的選擇。有人說matlab輪子多,其實python輪子也很多,而且很多matlab裡面有的輪子,python也有,只是可能沒matlab裡面的同款輪子那麼好用。但是python有的輪子,matlab卻不一定有,關鍵就是看你需要不需要這些輪子。這就是所謂純研究和工程的差別。至於詬病python速度的,numpy我相信速度並不慢,至少不會出現什麼「matlab跑一天的東西python要跑一周」這種情況。說到底matlab和python其實本質就是兩個東西,一個是商業數學軟體,一個是通用語言。最後如果要做符號計算,還是推薦Mathematica,python的sympy工具箱和Mathematica還是差了十萬八千里啊............樓主既然說了畢業後的工程,還是推薦去學習下python,基本上了解下語法,然後學習下numpy,matplotlab,scipy這三個東西,你原來matlab做的事情就可以用python做出來


搞研究沒有必要太在意語言和運行速度。除了做實時運算的。

別人跑1個小時,我跑2個小時,大不了我用2台電腦跑。搞運算誰會只有一台電腦?

在意的是想法,而不是實現方式。


相對於C,python做科學計算有什麼優勢?

肯定是C更快一些吧。


推薦閱讀:

如何畫有五個變數的圖形呢?
金融學專業,需要學習哪些軟體/編程語言?
matlab的UDP通信的丟包問題如何解決?
C++ 下有沒有矩陣計算速度能和 MATLAB 相當的矩陣或數學庫?
想用別人的實驗來算東西,但沒有他的數據,只有文獻里的圖線怎麼辦?

TAG:Python | 編程 | MATLAB |