1. Pandas.apply() – 特征工程瑰寶
創(chuàng)新互聯(lián)網(wǎng)站建設提供從項目策劃、軟件開發(fā),軟件安全維護、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務,主營業(yè)務為網(wǎng)站建設、做網(wǎng)站,成都APP應用開發(fā)以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。創(chuàng)新互聯(lián)深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
Pandas 庫已經(jīng)非常優(yōu)化了,但是大部分人都沒有發(fā)揮它的最大作用。想想它一般會用于數(shù)據(jù)科學項目中的哪些地方。一般首先能想到的就是特征工程,即用已有特征創(chuàng)造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函數(shù)。
在Pandas.apply()中,可以傳遞用戶定義功能并將其應用到Pandas Series的所有數(shù)據(jù)點中。這個函數(shù)是Pandas庫最好的擴展功能之一,它能根據(jù)所需條件分隔數(shù)據(jù)。之后便能將其有效應用到數(shù)據(jù)處理任務中。
2. Pandas.DataFrame.loc – Python數(shù)據(jù)操作絕妙技巧
所有和數(shù)據(jù)處理打交道的數(shù)據(jù)科學家(差不多所有人了!)都應該學會這個方法。
很多時候,數(shù)據(jù)科學家需要根據(jù)一些條件更新數(shù)據(jù)集中某列的某些值。Pandas.DataFrame.loc就是此類問題最優(yōu)的解決方法。
3. Python函數(shù)向量化
另一種解決緩慢循環(huán)的方法就是將函數(shù)向量化。這意味著新建函數(shù)會應用于輸入列表,并返回結果數(shù)組。在Python中使用向量化能至少迭代兩次,從而加速計算。
事實上,這樣不僅能加速代碼運算,還能讓代碼更加簡潔清晰。
4. Python多重處理
多重處理能使系統(tǒng)同時支持一個以上的處理器。
此處將數(shù)據(jù)處理分成多個任務,讓它們各自獨立運行。處理龐大的數(shù)據(jù)集時,即使是apply函數(shù)也顯得有些遲緩。
關于優(yōu)化Python編程的4個妙招,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關于python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。
我用python執(zhí)行時間23秒,用pypy執(zhí)行時間1.54秒,用numba加速為1.5秒,c語言在本機macos上執(zhí)行時間1.3秒,java運行速度1.45秒(jre8),詳細見圖片,可見引入jit編譯后,性能直逼c語言,而寫python比寫c容易太多,比java簡潔,寫代碼速度也是非常非常重要。由于歷史原因,很多python庫用的c語言庫,如pandas(pandas的矩陣計算用numpy優(yōu)化過非??欤赡鼙仁謱慶語言循環(huán)還要快),可以通過設計來分離c語言加速后的python代碼和pure python,分別用不同的加速方法,如numba可以單獨加速一個函數(shù),把需要大量計算的放在一個函數(shù)用numba加速(numbapro支持顯卡加速但是商業(yè)版的)。
所以只適當設計一下,python在一般計算問題下有這些解決方案下性能不是問題,實在不行,你還可以用boost::python來寫個c/c++調用庫來解決性能問題。
下面的測試說明,對于性能,原生python比較慢,在windows下python比linux,macos要快,用pypy后相當于java,c#速度,pypy,c#在windows下受益msvc表現(xiàn)較快,,go語言速度表現(xiàn)比較穩(wěn)定,c語言理論上是最快,但受環(huán)境和編譯器影響較大。對c#,java可能在GC垃圾回收時會表現(xiàn)不穩(wěn)定,因為在oop中有大量計算后可能要回收垃圾內存對象,這個沒有用到oop,只是純計算,理論上還是c/c++語言最快。
python和java比,運行速度比java慢,java強大于改進n次的強大jre,但python在很多領域能調用很多現(xiàn)成的開源庫,在數(shù)據(jù)分析中有優(yōu)勢,pyhton的代碼比java要簡潔,容易入門和使用。在優(yōu)化的計算庫幫助下,如numpy numba,pandas,scikit-learn,python的實際問題運算性能并不低于java。java主要是框架太多,相對復雜,java主要用于業(yè)務程序開發(fā),符合軟件工程理論,可伸縮性強,強類型有利于對程序的靜態(tài)檢查分析。java隨著安卓,hadoop,spark的興起,加入java語言的公司很多,性能也可以通過優(yōu)化解決很多問題。很多服務器如ubuntu server,centos都默認支持python,而java虛擬機需要安裝配置,python的安裝使用也相對簡單。python的庫有開箱即用感,很多業(yè)務領域,你可能還在用oop寫代碼,考慮設計模式,用鋤頭挖溝時,而python調用挖掘機api已經(jīng)炒菜完工開飯了,缺點是油耗比較大。
Python庫有很多,為大家簡單例舉幾個:
1、Arrow
Python中處理時間的庫有datetime,但是它過于簡單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕松地定位幾個小時之前的時間,可以輕松轉換時區(qū)時間,對于一個小時前,2個小時之內這樣人性化的信息也能夠準確解讀。
2、Behold
調試程序是每個程序員必備的技能,對于腳本語言,很多人習慣于使用print進行調試,然而對于大項目來說,print的功能還遠遠不足,我們希望有一個可以輕松使用,調試方便,對變量監(jiān)視完整,格式已于查看的工具,而Behold就是那個非常好用的調試庫。
3、Click
現(xiàn)在幾乎所有的框架都有自己的命令行腳手架,Python也不例外,那么如何快速開發(fā)出屬于自己的命令行程序呢?答案就是使用Python的Click庫。Click庫對命令行api進行了大量封裝,你可以輕松開發(fā)出屬于自己的CLI命令集。終端的顏色,環(huán)境變量信息,通過Click都可以輕松進行獲取和改變。
4、Numba
如果你從事數(shù)學方面的分析和計算,那么Numba一定是你必不可少的庫。Numpy通過將高速C庫包裝在Python接口中來工作,而Cython使用可選的類型將Python編譯為C以提高性能。但是Numba無疑是最方便的,因為它允許使用裝飾器選擇性地加速Python函數(shù)。
5、Matlibplot
做過數(shù)據(jù)分析,數(shù)據(jù)可視化的數(shù)學學生一定知道m(xù)atlab這個軟件,這是一個收費的數(shù)學商用軟件,在Python中,Matlibplot就是為了實現(xiàn)這個軟件中功能開發(fā)的第三方Python庫。并且它完全是免費的,很多學校都是用它來進行數(shù)學教學和研究的。
6、Pillow
圖像處理是任何時候我們都需要關注的問題,平時我們看到很多ps中的神技,比如調整畫面顏色,飽和度,調整圖像尺寸,裁剪圖像等等,這些其實都可以通過Python簡單完成,而其中我們需要使用的庫就是Pillow。
7、pyqt5
Python是可以開發(fā)圖形界面程序的。而pyqt就是一款非常好用的第三方GUI庫,有了它,你可以輕松開發(fā)出跨平臺的圖形應用程序,其中qtdesigner設計器,更是加速了我們開發(fā)圖形界面的速度。
將函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)。 函數(shù)式編程就是指這種高度抽象的編程范式。
變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)。如下所示:
map(fun, lst),將傳入的函數(shù)變量func作用到lst變量的每個元素中,并將結果組成新的列表返回。
定義一個匿名函數(shù)并調用,定義格式如--lambda arg1,arg2…:表達式
reduce把一個函數(shù)作用在一個序列[x1, x2, x3, …]上,這個函數(shù)必須接收兩個參數(shù),reduce把結果繼續(xù)和序列的下一個元素做累積計算。
filter() 函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
閉包的定義?閉包本質上就是一個函數(shù)
如何創(chuàng)建閉包?
如何使用閉包?典型的使用場景是裝飾器的使用。
global與nonlocal的區(qū)別:
簡單的使用如下:
偏函數(shù)主要輔助原函數(shù),作用其實和原函數(shù)差不多,不同的是,我們要多次調用原函數(shù)的時候,有些參數(shù),我們需要多次手動的去提供值。
而偏函數(shù)便可簡化這些操作,減少函數(shù)調用,主要是將一個或多個參數(shù)預先賦值,以便函數(shù)能用更少的參數(shù)進行調用。
我們再來看一下偏函數(shù)的定義:
類func = functools.partial(func, *args, **keywords)
我們可以看到,partial 一定接受三個參數(shù),從之前的例子,我們也能大概知道這三個參數(shù)的作用。簡單介紹下:
總結
本文是對Python 高階函數(shù)相關知識的分享,主題內容總結如下:
只需要在函數(shù)前使用單獨一行,加
@jit
但并不是所有的函數(shù)都有效,主要是針對以python代碼進行數(shù)學計算為主的函數(shù)。
1、 lru_cache
這個裝飾器來自functools模塊。該模塊包含在標準庫中,非常易于使用。它還包含比這個裝飾器更酷的功能,但這個裝飾器是非常受人喜歡的。此裝飾器可用于使用緩存加速函數(shù)的連續(xù)運行。當然,這應該在使用時記住一些關于緩存的注意事項,但在通用使用情況下,大多數(shù)時候這個裝飾器都是值得使用的。
2、JIT
JIT是即時編譯的縮寫。通常每當我們在Python中運行一些代碼時,發(fā)生的第一件事就是編譯。這種編譯會產(chǎn)生一些開銷,因為類型被分配了內存,并存儲為未分配但已命名的別名,使用即時編譯,我們在執(zhí)行時才進行編譯。
在很多方面,我們可以將其視為類似于并行計算的東西,其中Python解釋器同時處理兩件事以節(jié)省時間。Numba JTI編譯器因將這一概念提到Python中而聞名,可以非常輕松地調用此裝飾器,并立即提高代碼的性能。Numba包提供了JIT裝飾器,它使運行更密集的軟件變得更加容易,而不必進入C。
3、do_twice
do_twice裝飾器的功能與它的名字差不多。此裝飾器可用于通過一次調用運行兩次函數(shù),對調試特別有用。它可以用于測量兩個不同迭代的功能。
4、count_calls
count_calls裝飾器可用于提供有關函數(shù)在軟件中使用多少次的信息。與do_twice一樣,對調試也特別有用。
5、dataclass
為了節(jié)省編寫類的時間,推薦使用dataclass裝飾器。這個裝飾器可用于快速編寫類中常見的標準方法,這些方法通常會在我們編寫的類中找到。
6、singleton
singleton是一個單例裝飾器。通常,單例裝飾器是由用戶自己編寫的,實際上并不是導入的。
7、use_unit
在科學計算中經(jīng)常派上用場的一種裝飾器是use_unit裝飾器。此裝飾器可用于更改返回結果的表示單位。這對于那些不想在數(shù)據(jù)中添加度量單位但仍希望人們知道這些單位是什么的人很有用。這個裝飾器可不是在任何模塊中真正有用,但它是非常常見的,對科學應用程序非常有用。
當前標題:python加速函數(shù) python加快運行速度
鏈接URL:http://redsoil1982.com.cn/article46/doocpeg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信公眾號、、響應式網(wǎng)站、關鍵詞優(yōu)化、虛擬主機
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)