計算化學,有python基礎還有必要學習matlab么?
本人初學計算化學,今後可能會涉及到方法方面,本科第二專業是計算機,有編程(包括python)基礎,但不知道時候還需要花時間去學習matlab?在計算化學方面專註於python是不是可以?
(利益相關:我 matlab 和 python 都用,我是搬磚的不是寫代碼的)
從我一些搞計算化學的朋友那裡看,基本用的都是 fortran, c/c++,或者就是商用的量化從頭計算軟體 Gaussian, Molpro, Cfour 等等計算化學大體上分成三塊:
1.搞演算法的。這幫人基本上是數學家+計算機科學家,涉及最底層的代碼、演算法、數據結構,自然得用底層語言 c 或者 fortran 等等2.搞量化從頭計算的。這幫人大體是用已經開發好的量化計算軟體(如開頭所述)。量化從頭計算涉及專業性很強的解薛定諤方程的演算法,據個人所知,matlab 這種大型商業公司的軟體花精力去專門做一個量化從頭計算的包肯定是虧本的(相比而言經濟學、統計學等等的包還有點搞頭)。不過印象中也有看到過用 matlab 做很粗淺的量化計算的文獻。3. 搞分子動力學模擬的。這幫人主要是用經典力學方法計算。用啥語言的都有。對於 2 和 3 來說,個人以為,選擇什麼語言通常會考量它的計算效率、易用性和擴展性,以及——組裡以前用的啥!matlab 做矩陣運算非常好,但價格不菲啊!python 現在越來越流行,又是免費的,但是單純用 python 計算速度可能會差一點。此外,它們應該都沒有量化從頭計算對應的擴展包。
如果你的方向更多的是用現成的量化計算軟體去算新的化學反應體系,那 matlab 估計不怎麼用得到。如果你的方向更多的偏向於統計,並且設計很多自己寫代碼的部分,那選擇一個自己熟悉的、運算速度滿足項目需求的語言就可以了。畢竟 matlab 和 python 都有介面直接調用 c/c++,你要嫌慢最後總歸回到最底層上面去。題外話,計算化學找不到出路都轉碼農去了。如果你真的對編程感興趣,底層語言一定是要學的。千萬不要停留在 matlab 這種要花錢的解釋性語言上面。如果你對商業感興趣,用 matlab 可以干很多別的事兒(不過 python 應該也都能幹,數據挖掘什麼的)
最後說一句:大部分時候,說某某語言慢的人,都是自己代碼寫得爛。本人曾優化了組裡留下來的 matlab 代碼,把速度提了幾十倍。每種語言都有其長處,但最終你的演算法寫得好,才能真正跑起來。做些數據分析的話python夠了,從頭寫/改底層的動力學/量子化學code的話最好懂c/c++/fortran中至少一個。
竊以為「學習matlab」主要是學習各種工具箱的使用,語言層面,有其他過程式語言的基礎,用前翻下文檔就基本應付過去了。當然如果組裡或周圍大家用matlab較多,或者有積累的代碼的話,花點時間深入學習一下也應該是合算的。
如果熟悉fortran 90,numpy之類的,matlab可以直接上手用,只需要注意它提供的工具箱的使用就可以了。現在我一般的計算(16core x 2天以下)都是在numpy跑,據我的經驗,如果庫用的不差的話,效率能跟用相同數學庫的靜態語言在一個量級。我主要是做矩陣操作,openblas+mkl@intel64,share memory並行。
更底層的需求,比如電子結構或動力學,matlab的使用非常少,如果需要開發或hacking的話,自然是源碼用啥咱就用啥了。
總的說來,計算化學的大部分工作只需要較簡單的業務邏輯,必須用高級語言特性的情況比較少,因此實用角度看,用啥語言或許不是那麼重要。完全可以只使用python,學習一下numpy和scipy這兩個library。Matlab那個效率,用來做計算還是比python差很多的。當然,大多數計算化學的軟體是用更加底層的Fortran,C/C++寫的。你如果想從事商業化或者開源的計算化學軟體開發,也需要學習其中一門。
學過一點兒燃燒,可能跟你的計算化學有關係。博導,老闆,公司,etc。用什麼,你就得跟著學什麼。。。但是扯到計算,現在潮流得用c++和c,老一輩用fortran,我手上有的量子力學和燃燒學的code都是fortran寫的(從大牛的網頁那兒下的,不是自己寫的)。
python還是matlab都太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太慢!
你知道有多慢嗎,同樣的演算法,fortran跑幾秒而已,我matlab跑了142秒。。。(更深層次的原因是我matlab爛。。。)我不太理解「方法方面」是什麼意思,那我就當成你要研究化學反應機理,所以你要寫code做計算,我剛剛也提到了,我手上的燃燒的code都是fortran,而且是f77,所以我覺得學一門比較基礎效率比較高的語言還是非常重要的。雖然我做作業的code,基本上都可以自己用matlab寫,由於只涉及不到十個反應方程式,一分鐘也就能出結果。不過我相信,一般來說,做研究的話,涉及到的方程式和條件非常多,計算量會變得非常龐大,絕對不像課堂作業那般小打小鬧的。所以我的建議是:學門效率高的語言。本人計算機方向,編程這種事,如果你不追求程序多麼多麼優美,只要能做事,效率ok,那我覺得,只要掌握一門就可以了,python完全夠了。個人也用過matlab,感覺就是,跟其他編程語言差不多,而且更簡單,有個示常式序,你讀懂了,也就可以寫了。所以,專門去學什麼的不是很有必要啦~
一個免費,一個收費,你看著辦吧
需要,python是好用 但是要繪圖還是matlab好用和強大
matlab屬於那種軟體,不怎麼需要編程功底,裡面語言很容易上手,裡面好多工具箱,基本的數據處理問題都能處理了,我一般喜歡用它做數據擬合什麼的
推薦閱讀:
※如何看待通過《笨辦法學Python》入門編程的行為?
※有關python3的multiprocessing.Pool.map問題,發生錯誤??
※動態類型的語言的優缺點有哪些?
※python shell代碼無法保存為何?
※python 中 os._exit(), sys.exit(), exit() 的區別是什麼?