機器學習和計算機視覺方向的CS碩士研究生,應該往python還是MATLAB發展?

題主背景:電子本科研究生轉CS(機器學習和計算機視覺方向),MATLAB用的比較熟。

想往python發展,原因:

1. python在網路編程和文本處理方面感覺做的比MATLAB好一點。

2. python寫出來的腳本很容易編譯成exe文件,MATLAB腳本要在沒有安裝MATLAB的環境上運行比較困難。

3. 好像很多公司現在招聘都青睞會python的。

感覺MATLAB的優點:

1. 調試很方便,滑鼠指著變數就能顯示當前值,而且圖像處理過程中只要imshow一下就可以看到當前圖像被處理成什麼樣子了。

2.感覺知道的python IDE沒有MATLAB那麼強大(可能是我孤陋寡聞,python大神勿噴),調試起來沒有matlab方便。


這個問題沒必要爭了,matlab 2014b 開始支持調用Python和被Python調用了。


我剛剛用python的時候也有這些顧慮,感覺Matlab的一大優點在於它的IDE做得好,這種可以直接查看變數數據的編輯器簡直太有用了,而且debug起來也特別容易。其實python也有類似的編輯器,叫Spyder,界面類似Matlab,功能也相近。建議題主直接去python官網下載anaconda發行版,這類似於一個Kit,裡面有Spyder編輯器,python解釋器以及一些常用的或很主流的包,裡面也有專門用於下載安裝其他包的工具,非常方便。


我曾經是Matlab的忠實粉絲,不過近年來用Python多了一些。

Python主要有這麼幾個優點:

1) 比Matlab體積小得多;

2) 各種非數值計算的庫豐富(尤其是文本處理、網路方面的);

3) 程序比Matlab還簡潔一些。

不過,在Matlab的IDE里畫圖的方便性,還是Python的matplotlib所不能比擬的,所以需要畫圖時我就會打開Matlab。

最近我發現Python也有了個IDE叫Spyder,可以直接畫圖。雖然還沒有用過,但看起來是要完爆Matlab的節奏……


關於Python的IDE,可以參考這個:

在機器學習科學計算領域,有哪些工具能讓python和matlab一樣好用? - 李海濤的回答


這個問題當然取決於你所在方向上別人用什麼做了,視覺方面大家給的源代碼茫茫多都是MATLAB的(當然更多的是連代碼都不放的)。

當然反過來如果做了deep learning這樣都是Python介面的東西,你硬上MATLAB也是給自己找麻煩。

總之應該選一個實現起來最快的語言,畢竟是為了驗證想法和拿到實驗數據。

至於你考慮到的找工作方面,我覺得無非是學一個新語言而已,自己隨便學學然後寫幾個小東西就足夠了。而且如果你學Python是為了找工作,有時間鑽研Python不如把時間拿去刷題。


如果你選擇以後就業而不是做科研,你最終都會回到C++上來!


1. Python有一個包叫IPython,可能比matlab方便。而且畫圖的話用matplotlib幾乎就是matlab的移植。

2. 但是科學計算上性能通常還是matlab略勝一籌,而且工具包支持比較強大(不過Python也在迎頭趕上了)。

3. 如果要做文本處理和網路的話還是Python吧。

4. 可以兩個同時學啊。


1.請使用正版matlab

2.python請使用pycharm,有社區版,也可以付費購買專業版

3.python有matplotlib,畫圖也很簡單

4.matlab生成exe比python簡單多了

5.請養成下斷點調試的習慣


推薦 julia

優點:

  1. 數學表達能力強,原生支持各種矩陣、向量運算。個人感覺各種功能的正交組合甚至超過了 MATLAB 。例如: MATLAB 矩陣運算中,可以和 . 搭配的運算符很有限,.* (Element-wise multiplication), .^(Element-wise power), ./ (Right array division), . (Left array division), ." (Array transpose)。julia 語言中,運算符與 . 的搭配就很正交,幾乎所有運算符都可以加上.運算符,變成 elementwise (元素對元素的)運算符。

  2. 具有偉大的性能提升的潛力。性能極限甚至超過 C 語言。原因很簡單,對於變數的數據類型,可以不指定來自動推斷,也可以手動指定。手動指定變數類型之後的速度,基本就等價於 C。當使用自動類型推斷的時候,可以像 python 或者 MATLAB 一樣快速開發原型。當手動指定類型之後,可以用近乎 C 一般的速度去跑生產代碼。

  3. 語言年輕,且去中心化。2015年4月9日的版本是0.3.7,還沒有到1.0,各種語言特性都在劇烈變動中。比 C 語言還快的原因有兩方面:A. 可以利用 C 語言發明以來最新的業界經驗和科研成果。B. 整個 julia 語言的基礎是基於 github 開源的,保證了語言的開放性。又由於有足夠多學術界的關注,最新的學界成果得以引入 julia 語言中。

  4. 直接調用 C, Python,Java, MATLAB 和 R。C 調用這個算是現代語言的基本功能,但 julia 做得很舒服。無需配置,直接用 ccall。格式如下,ccall((:函數名,「指定C庫文件」),返回值類型,(輸入參數數據類型),輸入參數)。PyCall (https://github.com/stevengj/PyCall.jl)得說是很流氓的。使用起來也是超級方便:using PyCall; @pyimport numpy as np; s = sin(3 * t + 4 * np.cos(2 * t)); 。例如:繪圖包 PyPlot (https://github.com/stevengj/PyPlot.jl)就是利用 Python。一連幾年 julia 都一直在 PyCon 上做宣傳。同樣邪惡的還有 JavaCall(https://github.com/aviks/JavaCall.jl) 和 RCall (https://github.com/JuliaStats/RCall.jl)。其實 JuliaLang 也有個包叫 MATLAB.jl (https://github.com/JuliaLang/MATLAB.jl),支持直接調用 MATLAB,最大限度的保護你的智力投資。

  5. 原生的單元測試支持。默認程序包開發的格式中,就內置了測試架構。語言內置單元測試宏 @test。我個人覺得其實這裡差一點,還沒有對於行為驅動開發 (BDD)的原生支持。這一點可能在我看懂 FactCheck.jl (https://github.com/julialang/factcheck.jl)之後再進一步修改。
  6. 方便自由的程序包開發。只要在 github 上開一個 .jl 結尾的代碼庫,然後按照指定格式提交 METADATA 給 JuliaLang。就可以把自己開發的包提交到 Julia 官方庫。
    很少有哪個語言的委員會這麼親民的,TeXLive還得是每年升級呢。程序包是否受官方包管理器支持對於成果推廣的價值是無法估量的。我學習 julia 不到一周的時候就提交一個庫(https://github.com/quxiaofeng/ProjectiveDictionaryPairLearning.jl),且被納入官方包庫,這裡順便安利一下。

原生可以調用 python,且可以使用與 matlab 極為相似的語法。有MAT.jl包可以讀寫mat文件,與實驗室其他matlab用戶共享數據,良好兼容。

對應ipython, 有ijulia。


去企業找工作python好一點,搞科研差不多。


鑒於碩士不大可能從事演算法研究工作,建議主修c++,輔修一門腳本語言


我是做視覺的,說一說我的觀點。原來大學的時候習慣用Matlab,後來上手python後已經很少用Matlab了。先說基本的庫,什麼numpy,matplotlib很多很多,總有一個能滿足你的需求。python的環境配置也不是很難,我用的是anaconda,然後IDE用的Spyder,至於如何安裝庫和調用庫也很簡單,以mac上cpu版本的tensorflow為例:1.source activate root 2.sudo pip install tensorflow 3.在Spyder中就可以import tensorflow as tf了。所以目前感覺原來Matlab做的它都能做甚至做得更好,除了simulink。深度學習機器學習在python上支持的更好一些,很多相關blog和書籍也都是以python為基礎展開的。總結一下,其他領域我不敢妄言,機器學習和深度學習相關的,最好還是精通python會比較好~


跟題注的遭遇類似,說下自己的感受。本人大學期間沒接觸過python,一直用matlab作為實驗語言。現在做項目已經轉移到python。為什麼?

1.代碼簡單程度比較。差不多,但我感覺python的語法更嚴格一些。

2. 版權問題,好像在中國沒有,但是總不能一直用盜版的,畢竟還是要在圈內混的。

3.在CV方面。多數最新的高校研究成果是基於Matlab的,為什麼呢?還是因為簡單。那我們為什麼還要拋棄matlab? 不是說它不好,而是在於它不符合程序員編程的習慣,我們需要的體驗有時候就在於import的過程。。而且現在的公司似乎沒有用matlab的,研究機構除外。

4.可能會有一些人噴我為什麼不用c++,其實這麼噴是有道理的,畢竟從應用的角度來講還是c語言之類是王道。但作為實現idea的工具,如果有一種語言可以迅速驗證想法的正確性,何樂而不為呢?

最後,我的感覺是並不是選擇某一們語言的問題,而是樓主想要的是什麼,將來需要去做什麼?如果是去高校,似乎保持用matlab就好,但去公司的話還是建議python c++


技多不壓身


我在用Python(x,y)。調試也方便,文檔也容易看。並且很多包一步到位


就像。。。衝鋒衣還是滑雪服?


你可以同時學啊,話說python很大的問題時很多庫不全吧,還是看你用的領域啦。


真的要糾結語言嗎?難道不應該更關注理論深度和idea嗎?


很多回答都提到了matplotlib,竟然沒人提下seaborn,我就強烈推薦下這個包啦,這個包是在matplotlib基礎上開發出來的,特點就是產出的圖有一股ggplot的風格,適合看慣了R作圖的同志們。。


Matlab很強大,公司有人用。


matlab就只有向量和矩陣,想弄個二叉樹就沒辦法了,而python有numpy,性能也很好。數據結構絕對是有用的,做科學計算的還是把編程水平提高點吧


  1. 珍愛生命,遠離matlab

  2. python是一個不錯的選擇,至少學了以後不會後悔


推薦閱讀:

如何用數學軟體畫一個「聖誕樹」?
python多進程為什麼一定要__name__="__main__"?
為啥進程池封裝在裝飾器中不能生效,而多進程可以?
進程間通信和線程間通信的區別?
如何利用Python抓取PDF中的某些內容?

TAG:編程語言 | Python | MATLAB | 機器學習 | 計算機科學 |