用 Python 做科學(xué)計(jì)算,但是被 Python 的運(yùn)行速度所困擾。矩陣運(yùn)算也很慢,想征求下大家的建議。有什么優(yōu)化 Python 科學(xué)計(jì)算的方法么?
py科學(xué)計(jì)算用的不太多。也就是最近天天跑數(shù)據(jù)分析。我簡單說自己的一些基本經(jīng)驗(yàn)給比我還菜的新手,拋磚引玉
一:學(xué)會正確使用numpy scipy。 numpy scipy寫好的絕不自己寫,比如矩陣運(yùn)算等操作,pylab的實(shí)現(xiàn)還算不錯(cuò)。各種函數(shù)都有,盡量使用他們可以避免初學(xué)者大部分的速度不足問題。因?yàn)檫@些函數(shù)大部分都是預(yù)編譯好的。
根據(jù)我?guī)啄昵暗臏y試,python的矩陣運(yùn)算速度并不慢,(因?yàn)槟氵\(yùn)行的是動(dòng)態(tài)鏈接庫里面的函數(shù)而不是腳本)比mathematica快,和matlab持平。
大部分新手不擅長看文檔啥都自己造輪子是不好的。當(dāng)然老手把效率寫的比開源庫高也不算啥新聞,畢竟有對特定程序的優(yōu)化
二:減少for的使用,多使用向量化函數(shù),np.vectorlize可以把函數(shù)變成對數(shù)組逐元素的操作,比for效率高幾個(gè)華萊士。
三:對內(nèi)存友好,操作大矩陣的時(shí)候減少會引起整矩陣對此copy的操作
四:系統(tǒng)最慢的大部分時(shí)候是io,包括上面說的內(nèi)存操作和頻繁的讀入讀出以及debug輸出。避免他們,在需要實(shí)時(shí)處理的時(shí)候引入類似于gpu的pipeline管線機(jī)制或者使用靈活的多線程編程可以起到奇效。
五:matplotlib的繪圖效率并不高明,在使用交互繪圖(plt.ion)的時(shí)候減少不必要的刷新率。
六:程序?qū)it(運(yùn)行前編譯)友好,避免頻繁的改動(dòng)數(shù)據(jù)類型引起的繁雜類型推導(dǎo)(不過很少見科學(xué)計(jì)算程序有這個(gè)毛病)
七:要不然,干脆把python用cython之類的玩意編譯了吧。。但在科學(xué)計(jì)算上我覺得這樣做卵用不大。
科學(xué)計(jì)算最好應(yīng)該還是使用gpu加速,但關(guān)于py如何使用cuda/opencl加速我不太懂。還望后面的朋友補(bǔ)充。一些基本的經(jīng)驗(yàn)就這些,應(yīng)該是入門者都懂了…
初級會計(jì)職稱中級會計(jì)職稱經(jīng)濟(jì)師注冊會計(jì)師證券從業(yè)銀行從業(yè)會計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級會計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級建造師二級建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計(jì)算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論