Python 科學計算有哪些提高運算速度的技巧?

時間 2021-05-06 14:04:03

1樓:Sager

避免使用for迴圈。

備註:能用Series,Dataframe,矩陣運算的千萬不要使用for迴圈。也可以結合Python的列表解析和生成器表示式取代for迴圈。

2樓:陳樂群

3樓:劉天亮

用multiprocessing。如果沒記錯的話模組應該叫這個名字,跑程式的時候可以把需要大量計算的東西拆成幾小份。然後分發給每個程序。

這樣也算是能變相使用多程序吧。不過這個東西不太好用,應用範圍也挺窄的。別人說的很多看樣子都挺好的。

走投無路的時候可以試試這種多程序方法。

4樓:LEX

看了上面所有的回答不是c就是fortran 我只想問句你處理的專案的是linear 還是nonlinear 科學計算裡不能撇開matrices的特點談語言

5樓:回歸猴子

python因為所有東西都是物件。。所以box/unbox會耗時間。。然後gil所以同時只能解釋單執行緒。。

所以想加速。。

1。numpy的array可以理解為整個array是單一box。。所以盡量整體操作會節約時間。

2。把計算intensive的部分放到其他語言裡寫:首先是python/c的api。。不過這樣寫程式就沒有寫python那麼快了。 所以cython也是乙個不錯的選擇。。

3。另外針對gil 也是一樣的道理可以考慮把計算分給不同的py程式去完成(分資料集,分任務這樣),這樣就可以並行了;另外呢,2的方法也能解決這個問題。

4。有個東西叫numba。。numba.jit算是價效比最高的無腦優化了(不過好像影響精度)。。

6樓:

py科學計算用的不太多。也就是最近天天跑資料分析。我簡單說自己的一些基本經驗給比我還菜的新手,拋磚引玉

一:學會正確使用numpy scipy。 numpy scipy寫好的絕不自己寫,比如矩陣運算等操作,pylab的實現還算不錯。

各種函式都有,盡量使用他們可以避免初學者大部分的速度不足問題。因為這些函式大部分都是預編譯好的。

根據我幾年前的測試,python的矩陣運算速度並不慢,(因為你執行的是動態鏈結庫裡面的函式而不是指令碼)比mathematica快,和matlab持平。

大部分新手不擅長看文件啥都自己造輪子是不好的。當然老手把效率寫的比開源庫高也不算啥新聞,畢竟有對特定程式的優化

二:減少for的使用,多使用向量化函式,np.vectorlize可以把函式變成對陣列逐元素的操作,比for效率高幾個華萊士。

三:對記憶體友好,操作大矩陣的時候減少會引起整矩陣對此copy的操作

四:系統最慢的大部分時候是io,包括上面說的記憶體操作和頻繁的讀入讀出以及debug輸出。避免他們,在需要實時處理的時候引入類似於gpu的pipeline管線機制或者使用靈活的多執行緒程式設計可以起到奇效。

五:matplotlib的繪圖效率並不高明,在使用互動繪圖(plt.ion)的時候減少不必要的重新整理率。

六:程式對jit(執行前編譯)友好,避免頻繁的改動資料型別引起的繁雜型別推導(不過很少見科學計算程式有這個毛病)

七:要不然,乾脆把python用cython之類的玩意編譯了吧。。但在科學計算上我覺得這樣做卵用不大。

科學計算最好應該還是使用gpu加速,但關於py如何使用cuda/opencl加速我不太懂。還望後面的朋友補充。一些基本的經驗就這些,應該是入門者都懂了…

在科學計算方面,Python已經超過MATLAB了麼?

為什麼一定要分出個誰超越誰,根據具體問題,哪個快用哪個。至少在CFD領域,不可能,開玩笑呢 我覺得插值 求導 優化,常用的演算法兩種有區別嗎?兩者應用側重不同吧。Python在不用numba或cython的情況下,比MATLAB慢太多了。科學計算的將來是Julia。解大規模線性方程組numpy裡面的...

電腦科學與技術和計算機及應用有哪些差別?

恕我孤陋寡聞了。在我個人印象中,電腦科學與技術 CST 是本科專業,只在本科類院校報考書上看到過。計算機應用,大專專業吧。我表哥讀的就是這個,三年制,出來之後找不到啥工作。本科專業和專科專業的區別不用我多說了吧?另,計科的性質是偏學術型的,也修程式設計,可以說是軟體型計算機專業的老祖宗了,什麼都學。...

計算化學,有 Python 基礎還有必要學習 MATLAB 麼?

學姐吖 如果您有python基礎,matlab不是特別需要學習,看看別人怎麼寫,記住一些重要的函式,就能用了。我建議是用matlab做測試,做一些簡單的 大玥玥 matlab屬於那種軟體,不怎麼需要程式設計功底,裡面語言很容易上手,裡面好多任務具箱,基本的資料處理問題都能處理了,我一般喜歡用它做資料...