在機器學習科學計算領域,有哪些工具能讓python和matlab一樣好用?
來源:互聯網
上載者:User
我平時是做映像上的機器學習實驗的,識別和檢測之類的.從去年入學一直是用的matlab(老闆和實驗室同學們都用).但是似乎很多人覺得numpy+matplotlib+scipy比matlab更方便,而且我實際實驗中也發現matlab的mex介面很難debug,,而且有時候要用到cuda的話也感覺很難調試,經常就把matlab搞crush了需要重啟matlab調試,於是是嘗試用python.
但是我感覺python很難用誒.我的環境是ubuntu14+pycharm
比如:
我經常需要在程式中設定斷點去看看在映像中找的點對不對,在matlab中我可以在任意位置設定斷點,然後在命令視窗輸入命令去檢查變數狀態,這個功能我覺得非常方便
matlab斷點斷下來之後還可以在命令列中inshow()去看映像的狀態
matlab的工作空間非常的簡潔明了,變數的size和value都是一目瞭然的.
而使用python就讓我感覺很不適應,設定斷點之後要點debug才能在斷點那裡停下來(pycharm),而且斷點停下之後watch的變數也有好多冗餘資訊啊,其實我就想看幾個座標幾個特徵值是不是make sense.
請問我是python的使用方法不對呢還是映像類的本來就適合matlab,還是其他什麼原因?
回複內容:
2016年4月7日更新
目前來看,最好是將Anaconda與Pycharm結合起來。
Anaconda的優缺點在之前的答案裡面說了。
Pycharm相比Spyder的優點是:
1 調試更方便,Spyder在其他檔案裡面設定斷點,竟然無法停下來,必須得在主程式裡面設定一個斷點,然後“Step into”,如果嵌套比較深的話,這種方法特別麻煩。 Pycharm就沒有這個問題。
2 Pycharm的“Reformat code”功能我特別喜歡,可以自動將你的代碼排版規範,比如=兩邊各空一格,函數結尾空兩行等等,不止能作用於一個檔案,而且能一次性作用於整個項目!
Pycharm的缺點:
1 最新版本雖然支援了ipython,但功能體驗比較差,1,反應比較慢 2 tab鍵經常不能彈出對象的屬性與方法。
2 沒有workspace。
所以,我的建議是結合使用這兩個工具,基本上能達到MATLAB的使用體驗。
2016年3月14日的補充
經過一段時間使用,也發現了Anaconda的缺點。特別是spyder。
1 在workspace裡,對資料量偏大一點的變數進行查看,容易卡死,而MATLAB不會。
2 再workspace裡,浮點數只顯示小數點後三位,我經常要手工修改為顯示為小數點後6位,不知道怎麼修改預設設定。
3 斷點調試明顯沒有MATLAB方便。
4 沒有MATLAB那樣方便的Profiler,用於發現代碼運算瓶頸,而Spyder沒有。
還有其他的,就不一一列舉了,總之,在IDE上,Spyder相比MATLAB差遠了,但我用Python,仍然會用Spyder,因為目前沒有更好的替代品。
原答案:
千言萬語彙成一句話: 安裝Anaconda!
Anaconda非常適合做研究.Pycharm適合做開發,而不是研究.
為什麼說Anaconda好呢?
1 內建了很多適合搞科學研究的庫,比如numpy, scipy, pandas, matplotlib, sympy, sklearn等.
2 裡面的spyder的介面非常像matlab的介面, 還支援單步調試.編輯器像matlab那樣,可以建立cell(使用#%%,與matlab類似),方便查看與調試。
3 裡面的ipython notebook, 非常適合互動和展示成果.額.......試試WinPython? 有了它我已經好久沒開matlab了因為專業!像我這種程式員就天生受不了 Matlab 那種奇奇怪怪的文法,但是 Matlab 在它所擅長的領域裡做得很好!非常好!!只要你不拿 Matlab 當 Python 用就好。
Python 是通用程式設計語言,不是 Matlab 那種專業貨。既然是通用的,你拿它做科學計算當然沒問題,但是你會發現它不是專門為此設計的,如果你不懂(通用)編程,那麼你會發現有很多你所不理解的地方。
「在matlab中我可以在任意位置設定斷點,然後在命令視窗輸入命令去檢查變數狀態,這個功能我覺得非常方便
「matlab斷點斷下來之後還可以在命令列中inshow()去看映像的狀態」
另請注意,Python 只是一門程式設計語言。PyCharm 是一個為 Python 開發而設計的 IDE,但不是 Python 天生和唯一的 IDE,更不是為科學計算所專門設計的。(不過有個叫 sagemath 的平台是專為科學計算設計的,其主語言是 Python。)
PyCharm 設定斷點之後不能查看映像了嗎?我沒用過 PyCharm 所以不知道。但是我知道 Python 肯定是可以做到的。我調試過程中就會經常在有疑問的地方停下來,開個 Python 互動式命令列來仔細研究研究。有時我也會使用 pudb 這種專業(複雜)的調試工具。python debug只用過log & gdb,斷點之類從來沒用過。有這感覺就對了,也不枉費matlab賣那麼貴!只說明一點你還不善於使用python,如果能熟練運用就不會有你這種感受了。知乎編程處女答,零基礎裸學matlab半路繼續裸學python,過程痛苦,對於為什麼難深有體會:
被要求整改了,原來我是從一個沒有電腦基礎硬進入python的角度來描述學習的痛苦。可能這個角度比較片面,所以我修改了描述方法,以及簡述了我自己怎麼克服:
1.Matlab支援矩陣運算,慣壞了我們這群0電腦基礎的白菜。寫個類比產生個隨機數矩陣然後.*./甚至.^,簡直爽快。 然後到python裡些好處全沒了,.*./變成了複雜和更複雜的迴圈,對於剛轉到python上的人,算一個小噩夢
2.用包矩陣化解決掉第一個問題後,碰上第二個。Matlab函數想用就用,繼續慣壞我們非電腦出身,要多美好有多美好。然後到了各類物件導向的語言裡,先調用,再使用。向numpy這樣函數大量重名的大包還不敢調用*,非得一個個調。有時還有分清對象,sub對象,方法。這個問題接觸面相對象總是逃不掉的,有VBA基礎可能會不那麼吃力
3.然後只要一寫迴圈就會碰到的:縮排,縮排,縮排!
Matlab自動縮排外擴分層,繼續慣壞非CS簡直美好
python我想用遊標卡尺!(真不是網上的梗,我自發的想)。我自己通過寫短迴圈多段和灰字注釋能克服一部分
4.Matlab函數不懂直接help能告訴你函數的用法。
python裡能看原始碼,對於非電腦粗生的一開始會有閱讀困難。好在各包的web都是良心的。
5.我這個弱逼還沒遇到的路上的各種天坑。
我真的不是黑python,畢竟演算法相同類比一跑Matlab就掩面了。同時掩面的還有Matlab裡那一橫函數視窗,連存都要多存好幾個。
以上都是非CS零基礎學習多語言時被呵呵的肺腑之言。肯定會遭致程式員們的集體鄙視,所以被要求整改我沒啥怨言。只是我有一個小小的奢望,奢望程式員大神們能夠體會我們這些半路出家,又要學數學,又要學演算法,還要學語言,還要學市場看case的弱逼金數生。我們經常嘲笑自己是WOW裡幻想四修的德魯伊(金融,數學,統計,電腦)四個天賦,奈何天賦不夠還沒有裝備。我們當中甚至有完全不喜歡電腦的學生筆者自己強行看一段又一段的代碼。可以指責我們不喜歡就不要學,但是我們金數的學生都深知短板效應的可怕,以及學金融不懂電腦是何其的幼稚。對於我們而言,編程的唯一的目的就是實現,在此奢望一些理解。我們很弱,不怕被噴,噴我們我們也能學到東西。看完了樓上的答案。
先明確一點,題主做機器學習,所以以下都針對機器學習。
這個問題分兩方面。
首先是文法角度。從純文法上看,python 顯然比Matlab 好很多,但對於機器學習,Matlab 已經足夠用,能在保證能力強大的基礎上足夠簡單,完全符合科研人員的需求。比如Matlab 裡的類和對象是一團翔,但沒關係,因為科研人員用不到。一般搞科研,只需要寫個prototype ,能跑通就行,這時候Matlab “對物件導向的支援很差”反而成了一個優點,因為只需要面向過程即可,而面向過程的思路是非常自然而直觀的。
當然,mex 不好寫,GPU編程不方便,這確實是Matlab 的硬傷。另外Matlab 的運行效率比低,記憶體管理非常差,這也是一大缺點。
但題主的問題顯然不是語言層次的問題。看描述,題主感覺python
不方便。從語言角度,numpy+matplotlib+scipy 是足夠強大的,能滿足科研人員的一切需求,而且作為指令碼語言,python寫起來也比java c++簡單很多。那問題肯定出在工具上。
Matlab 的IDE 非常適合做科學計算,但PyCharm 只是個通用IDE,風格針對普通編程,並未對科學計算有特殊最佳化,非電腦出身可能用起來稍有不便。
所以我建議題主試試其他IDE。上面有人推薦Spyder,這個和Matlab 非常像,基本可以無縫接入。另外ipython notebook 也是神器,能寫程式能作筆記能分發展示,非常好用。
不過我現在一般都用VS 的python 外掛程式PTVS(Python Tools for Visual Studio
),有強大的VS 作支援,代碼補全啊、自動跳轉啊、調試啊等等都極其方便,推薦給題主和大家。如果matlab還沒python好用,怎麼對得起那幾萬塊錢。除開矩陣運算,python的表達能力比matlab高不知道多少。。(最近接一個matlab項目被這奇葩文法搞得痛不欲生的吐槽)
調試方面的話,不管pycharm還是anaconda我都只習慣看log。。斷點什麼的,不好用呢。。
傳說python程式員的兩次飛躍發生在學會decorator和unit test後,再有萬能的import大法加持,你就會感受到蛻變了~~