python加速函數(shù) python加快運(yùn)行速度

優(yōu)化Python編程的4個(gè)妙招

1. Pandas.apply() – 特征工程瑰寶

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、做網(wǎng)站,成都APP應(yīng)用開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

Pandas 庫已經(jīng)非常優(yōu)化了,但是大部分人都沒有發(fā)揮它的最大作用。想想它一般會(huì)用于數(shù)據(jù)科學(xué)項(xiàng)目中的哪些地方。一般首先能想到的就是特征工程,即用已有特征創(chuàng)造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數(shù)。

在Pandas.apply()中,可以傳遞用戶定義功能并將其應(yīng)用到Pandas Series的所有數(shù)據(jù)點(diǎn)中。這個(gè)函數(shù)是Pandas庫最好的擴(kuò)展功能之一,它能根據(jù)所需條件分隔數(shù)據(jù)。之后便能將其有效應(yīng)用到數(shù)據(jù)處理任務(wù)中。

2. Pandas.DataFrame.loc – Python數(shù)據(jù)操作絕妙技巧

所有和數(shù)據(jù)處理打交道的數(shù)據(jù)科學(xué)家(差不多所有人了!)都應(yīng)該學(xué)會(huì)這個(gè)方法。

很多時(shí)候,數(shù)據(jù)科學(xué)家需要根據(jù)一些條件更新數(shù)據(jù)集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優(yōu)的解決方法。

3. Python函數(shù)向量化

另一種解決緩慢循環(huán)的方法就是將函數(shù)向量化。這意味著新建函數(shù)會(huì)應(yīng)用于輸入列表,并返回結(jié)果數(shù)組。在Python中使用向量化能至少迭代兩次,從而加速計(jì)算。

事實(shí)上,這樣不僅能加速代碼運(yùn)算,還能讓代碼更加簡(jiǎn)潔清晰。

4. Python多重處理

多重處理能使系統(tǒng)同時(shí)支持一個(gè)以上的處理器。

此處將數(shù)據(jù)處理分成多個(gè)任務(wù),讓它們各自獨(dú)立運(yùn)行。處理龐大的數(shù)據(jù)集時(shí),即使是apply函數(shù)也顯得有些遲緩。

關(guān)于優(yōu)化Python編程的4個(gè)妙招,青藤小編就和您分享到這里了。如果您對(duì)python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關(guān)于python編程的技巧及素材等內(nèi)容,可以點(diǎn)擊本站的其他文章進(jìn)行學(xué)習(xí)。

python的性能

我用python執(zhí)行時(shí)間23秒,用pypy執(zhí)行時(shí)間1.54秒,用numba加速為1.5秒,c語言在本機(jī)macos上執(zhí)行時(shí)間1.3秒,java運(yùn)行速度1.45秒(jre8),詳細(xì)見圖片,可見引入jit編譯后,性能直逼c語言,而寫python比寫c容易太多,比java簡(jiǎn)潔,寫代碼速度也是非常非常重要。由于歷史原因,很多python庫用的c語言庫,如pandas(pandas的矩陣計(jì)算用numpy優(yōu)化過非??欤赡鼙仁謱慶語言循環(huán)還要快),可以通過設(shè)計(jì)來分離c語言加速后的python代碼和pure python,分別用不同的加速方法,如numba可以單獨(dú)加速一個(gè)函數(shù),把需要大量計(jì)算的放在一個(gè)函數(shù)用numba加速(numbapro支持顯卡加速但是商業(yè)版的)。

所以只適當(dāng)設(shè)計(jì)一下,python在一般計(jì)算問題下有這些解決方案下性能不是問題,實(shí)在不行,你還可以用boost::python來寫個(gè)c/c++調(diào)用庫來解決性能問題。

下面的測(cè)試說明,對(duì)于性能,原生python比較慢,在windows下python比linux,macos要快,用pypy后相當(dāng)于java,c#速度,pypy,c#在windows下受益msvc表現(xiàn)較快,,go語言速度表現(xiàn)比較穩(wěn)定,c語言理論上是最快,但受環(huán)境和編譯器影響較大。對(duì)c#,java可能在GC垃圾回收時(shí)會(huì)表現(xiàn)不穩(wěn)定,因?yàn)樵趏op中有大量計(jì)算后可能要回收垃圾內(nèi)存對(duì)象,這個(gè)沒有用到oop,只是純計(jì)算,理論上還是c/c++語言最快。

python和java比,運(yùn)行速度比java慢,java強(qiáng)大于改進(jìn)n次的強(qiáng)大jre,但python在很多領(lǐng)域能調(diào)用很多現(xiàn)成的開源庫,在數(shù)據(jù)分析中有優(yōu)勢(shì),pyhton的代碼比java要簡(jiǎn)潔,容易入門和使用。在優(yōu)化的計(jì)算庫幫助下,如numpy numba,pandas,scikit-learn,python的實(shí)際問題運(yùn)算性能并不低于java。java主要是框架太多,相對(duì)復(fù)雜,java主要用于業(yè)務(wù)程序開發(fā),符合軟件工程理論,可伸縮性強(qiáng),強(qiáng)類型有利于對(duì)程序的靜態(tài)檢查分析。java隨著安卓,hadoop,spark的興起,加入java語言的公司很多,性能也可以通過優(yōu)化解決很多問題。很多服務(wù)器如ubuntu server,centos都默認(rèn)支持python,而java虛擬機(jī)需要安裝配置,python的安裝使用也相對(duì)簡(jiǎn)單。python的庫有開箱即用感,很多業(yè)務(wù)領(lǐng)域,你可能還在用oop寫代碼,考慮設(shè)計(jì)模式,用鋤頭挖溝時(shí),而python調(diào)用挖掘機(jī)api已經(jīng)炒菜完工開飯了,缺點(diǎn)是油耗比較大。

常用的python庫,有哪些?

Python庫有很多,為大家簡(jiǎn)單例舉幾個(gè):

1、Arrow

Python中處理時(shí)間的庫有datetime,但是它過于簡(jiǎn)單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕松地定位幾個(gè)小時(shí)之前的時(shí)間,可以輕松轉(zhuǎn)換時(shí)區(qū)時(shí)間,對(duì)于一個(gè)小時(shí)前,2個(gè)小時(shí)之內(nèi)這樣人性化的信息也能夠準(zhǔn)確解讀。

2、Behold

調(diào)試程序是每個(gè)程序員必備的技能,對(duì)于腳本語言,很多人習(xí)慣于使用print進(jìn)行調(diào)試,然而對(duì)于大項(xiàng)目來說,print的功能還遠(yuǎn)遠(yuǎn)不足,我們希望有一個(gè)可以輕松使用,調(diào)試方便,對(duì)變量監(jiān)視完整,格式已于查看的工具,而Behold就是那個(gè)非常好用的調(diào)試庫。

3、Click

現(xiàn)在幾乎所有的框架都有自己的命令行腳手架,Python也不例外,那么如何快速開發(fā)出屬于自己的命令行程序呢?答案就是使用Python的Click庫。Click庫對(duì)命令行api進(jìn)行了大量封裝,你可以輕松開發(fā)出屬于自己的CLI命令集。終端的顏色,環(huán)境變量信息,通過Click都可以輕松進(jìn)行獲取和改變。

4、Numba

如果你從事數(shù)學(xué)方面的分析和計(jì)算,那么Numba一定是你必不可少的庫。Numpy通過將高速C庫包裝在Python接口中來工作,而Cython使用可選的類型將Python編譯為C以提高性能。但是Numba無疑是最方便的,因?yàn)樗试S使用裝飾器選擇性地加速Python函數(shù)。

5、Matlibplot

做過數(shù)據(jù)分析,數(shù)據(jù)可視化的數(shù)學(xué)學(xué)生一定知道m(xù)atlab這個(gè)軟件,這是一個(gè)收費(fèi)的數(shù)學(xué)商用軟件,在Python中,Matlibplot就是為了實(shí)現(xiàn)這個(gè)軟件中功能開發(fā)的第三方Python庫。并且它完全是免費(fèi)的,很多學(xué)校都是用它來進(jìn)行數(shù)學(xué)教學(xué)和研究的。

6、Pillow

圖像處理是任何時(shí)候我們都需要關(guān)注的問題,平時(shí)我們看到很多ps中的神技,比如調(diào)整畫面顏色,飽和度,調(diào)整圖像尺寸,裁剪圖像等等,這些其實(shí)都可以通過Python簡(jiǎn)單完成,而其中我們需要使用的庫就是Pillow。

7、pyqt5

Python是可以開發(fā)圖形界面程序的。而pyqt就是一款非常好用的第三方GUI庫,有了它,你可以輕松開發(fā)出跨平臺(tái)的圖形應(yīng)用程序,其中qtdesigner設(shè)計(jì)器,更是加速了我們開發(fā)圖形界面的速度。

一文讀懂Python 高階函數(shù)

將函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)。 函數(shù)式編程就是指這種高度抽象的編程范式。

變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)。如下所示:

map(fun, lst),將傳入的函數(shù)變量func作用到lst變量的每個(gè)元素中,并將結(jié)果組成新的列表返回。

定義一個(gè)匿名函數(shù)并調(diào)用,定義格式如--lambda arg1,arg2…:表達(dá)式

reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, …]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。

filter() 函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

閉包的定義?閉包本質(zhì)上就是一個(gè)函數(shù)

如何創(chuàng)建閉包?

如何使用閉包?典型的使用場(chǎng)景是裝飾器的使用。

global與nonlocal的區(qū)別:

簡(jiǎn)單的使用如下:

偏函數(shù)主要輔助原函數(shù),作用其實(shí)和原函數(shù)差不多,不同的是,我們要多次調(diào)用原函數(shù)的時(shí)候,有些參數(shù),我們需要多次手動(dòng)的去提供值。

而偏函數(shù)便可簡(jiǎn)化這些操作,減少函數(shù)調(diào)用,主要是將一個(gè)或多個(gè)參數(shù)預(yù)先賦值,以便函數(shù)能用更少的參數(shù)進(jìn)行調(diào)用。

我們?cè)賮砜匆幌缕瘮?shù)的定義:

類func = functools.partial(func, *args, **keywords)

我們可以看到,partial 一定接受三個(gè)參數(shù),從之前的例子,我們也能大概知道這三個(gè)參數(shù)的作用。簡(jiǎn)單介紹下:

總結(jié)

本文是對(duì)Python 高階函數(shù)相關(guān)知識(shí)的分享,主題內(nèi)容總結(jié)如下:

想要加速numpy,只需在原來編寫的python函數(shù)上面加@jit就可以嗎?有沒有所謂的參數(shù)等

只需要在函數(shù)前使用單獨(dú)一行,加

@jit

但并不是所有的函數(shù)都有效,主要是針對(duì)以python代碼進(jìn)行數(shù)學(xué)計(jì)算為主的函數(shù)。

推薦 8 個(gè)炫酷的 Python 裝飾器

1、 lru_cache

這個(gè)裝飾器來自functools模塊。該模塊包含在標(biāo)準(zhǔn)庫中,非常易于使用。它還包含比這個(gè)裝飾器更酷的功能,但這個(gè)裝飾器是非常受人喜歡的。此裝飾器可用于使用緩存加速函數(shù)的連續(xù)運(yùn)行。當(dāng)然,這應(yīng)該在使用時(shí)記住一些關(guān)于緩存的注意事項(xiàng),但在通用使用情況下,大多數(shù)時(shí)候這個(gè)裝飾器都是值得使用的。

2、JIT

JIT是即時(shí)編譯的縮寫。通常每當(dāng)我們?cè)赑ython中運(yùn)行一些代碼時(shí),發(fā)生的第一件事就是編譯。這種編譯會(huì)產(chǎn)生一些開銷,因?yàn)轭愋捅环峙淞藘?nèi)存,并存儲(chǔ)為未分配但已命名的別名,使用即時(shí)編譯,我們?cè)趫?zhí)行時(shí)才進(jìn)行編譯。

在很多方面,我們可以將其視為類似于并行計(jì)算的東西,其中Python解釋器同時(shí)處理兩件事以節(jié)省時(shí)間。Numba JTI編譯器因?qū)⑦@一概念提到Python中而聞名,可以非常輕松地調(diào)用此裝飾器,并立即提高代碼的性能。Numba包提供了JIT裝飾器,它使運(yùn)行更密集的軟件變得更加容易,而不必進(jìn)入C。

3、do_twice

do_twice裝飾器的功能與它的名字差不多。此裝飾器可用于通過一次調(diào)用運(yùn)行兩次函數(shù),對(duì)調(diào)試特別有用。它可以用于測(cè)量?jī)蓚€(gè)不同迭代的功能。

4、count_calls

count_calls裝飾器可用于提供有關(guān)函數(shù)在軟件中使用多少次的信息。與do_twice一樣,對(duì)調(diào)試也特別有用。

5、dataclass

為了節(jié)省編寫類的時(shí)間,推薦使用dataclass裝飾器。這個(gè)裝飾器可用于快速編寫類中常見的標(biāo)準(zhǔn)方法,這些方法通常會(huì)在我們編寫的類中找到。

6、singleton

singleton是一個(gè)單例裝飾器。通常,單例裝飾器是由用戶自己編寫的,實(shí)際上并不是導(dǎo)入的。

7、use_unit

在科學(xué)計(jì)算中經(jīng)常派上用場(chǎng)的一種裝飾器是use_unit裝飾器。此裝飾器可用于更改返回結(jié)果的表示單位。這對(duì)于那些不想在數(shù)據(jù)中添加度量單位但仍希望人們知道這些單位是什么的人很有用。這個(gè)裝飾器可不是在任何模塊中真正有用,但它是非常常見的,對(duì)科學(xué)應(yīng)用程序非常有用。

當(dāng)前標(biāo)題:python加速函數(shù) python加快運(yùn)行速度
鏈接URL:http://www.muchs.cn/article46/doocpeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信公眾號(hào)、、響應(yīng)式網(wǎng)站關(guān)鍵詞優(yōu)化、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司