国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何加速apply函數600倍的技巧

數據分析與開發 ? 來源:kaggle競賽寶典 ? 作者:杰少 ? 2022-05-12 10:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

推薦關注↓

[ 引言 ] 雖然目前dask,cudf等包的出現,使得我們的數據處理大大得到了加速,但是并不是每個人都有比較好的gpu,非常多的朋友仍然還在使用pandas工具包,但有時候真的很無奈,pandas的許多問題我們都需要使用apply函數來進行處理,而apply函數是非常慢的,本文我們就介紹如何加速apply函數600倍的技巧。

實驗對比01Apply(Baseline) 我們以Apply為例,原始的Apply函數處理下面這個問題,需要18.4s的時間。
importpandasaspd
importnumpyasnp
df=pd.DataFrame(np.random.randint(0,11,size=(1000000,5)),columns=('a','b','c','d','e'))
deffunc(a,b,c,d,e):
ife==10:
returnc*d
elif(e=5):
returnc+d
elifereturna+b
%%time
df['new']=df.apply(lambdax:func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1)
CPUtimes:user17.9s,sys:301ms,total:18.2s
Walltime:18.4s

		
			02Swift加速
											因為處理是并行的,所以我們可以使用Swift進行加速,在使用Swift之后,相同的操作在我的機器上可以提升到7.67s。
			
%%time
#!pipinstallswifter
importswifter
df['new']=df.swifter.apply(lambdax:func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1)
HBox(children=(HTML(value='DaskApply'),FloatProgress(value=0.0,max=16.0),HTML(value='')))

CPUtimes:user329ms,sys:240ms,total:569ms
Walltime:7.67s

		
			03向量化
											使用Pandas和Numpy的最快方法是將函數向量化。如果我們的操作是可以直接向量化的話,那么我們就盡可能的避免使用:
			
  • for循環;
  • 列表處理;
  • apply等操作
在將上面的問題轉化為下面的處理之后,我們的時間縮短為:421 ms。
%%time
df['new']=df['c']*df['d']#defaultcasee==10
mask=df['e']'new']=df['c']+df['d']
mask=df['e']'new']=df['a']+df['b']
CPUtimes:user134ms,sys:149ms,total:283ms
Walltime:421ms

		
			04類別轉化+向量化
											我們先將上面的類別轉化為int16型,再進行相同的向量化操作,發現時間縮短為:116 ms。
			
forcolin('a','b','c','d'):
df[col]=df[col].astype(np.int16)
%%time
df['new']=df['c']*df['d']#defaultcasee==10
mask=df['e']'new']=df['c']+df['d']
mask=df['e']'new']=df['a']+df['b']
CPUtimes:user71.3ms,sys:42.5ms,total:114ms
Walltime:116ms

		
			
											05轉化為values處理
											在能轉化為.values的地方盡可能轉化為.values,再進行操作。 
			
  • 此處先轉化為.values等價于轉化為numpy,這樣我們的向量化操作會更加快捷。
于是,上面的操作時間又被縮短為:74.9ms。
%%time
df['new']=df['c'].values*df['d'].values#defaultcasee==10
mask=df['e'].values'new']=df['c']+df['d']
mask=df['e'].values'new']=df['a']+df['b']
CPUtimes:user64.5ms,sys:12.5ms,total:77ms
Walltime:74.9ms

		
			

		
			實驗匯總
						通過上面的一些小的技巧,我們將簡單的Apply函數加速了幾百倍,具體的:
			
  • Apply: 18.4 s
  • Apply + Swifter: 7.67 s
  • Pandas vectorizatoin: 421 ms
  • Pandas vectorization + data types: 116 ms
  • Pandas vectorization + values + data types: 74.9ms
參考文獻:Do You Use Apply in Pandas? There is a 600x Faster Way

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SWIFT
    +關注

    關注

    0

    文章

    125

    瀏覽量

    24783
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67499
  • 向量
    +關注

    關注

    0

    文章

    55

    瀏覽量

    12036

原文標題:Pandas 中 Apply 函數加速百倍的技巧

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    探秘PQC600系列600W 3" x 5" AC - DC開放式框架電源轉換器

    探秘PQC600系列600W 3 x 5 AC - DC開放式框架電源轉換器 在電子設備的設計中,電源供應器就像是設備的“心臟”,為整個系統提供穩定、可靠的電力。今天,我們就來深入了解一下
    的頭像 發表于 12-16 15:35 ?408次閱讀

    常用硬件加速的方法

    之前總結了一些常用硬件加速方法 1)面積換速度:也就是串轉并運算,可以多個模塊同時計算; 2)時間換空間:時序收斂下通過頻率提高性能,雖然面積可能稍微加大點; 3)流水線操作:流水線以面積換性能,以
    發表于 10-29 06:20

    請問IR600 CLI 如何保存配置?

    IR600 CLI 如何保存配置?
    發表于 08-06 07:51

    詳解hal_entry入口函數

    當使用RTOS時,程序從main函數開始進行線程調度;當沒有使用RTOS時,C語言程序的入口函數main函數調用了hal_entry函數。由于我們新建的工程是沒有選用RTOS的,因此,
    的頭像 發表于 07-25 15:34 ?1978次閱讀

    用DevEco Studio增量補丁修復功能,讓鴻蒙應用的調試效率大增

    DevEco Studio中得到了很好的解答,而增量補丁修復便是其中的核心特性之一。今天,我們要深入探討鴻蒙應用增量補丁修復及其兩個能夠大幅加速開發進度的強大功能——Hot Reload和Apply
    發表于 04-14 17:35

    使用NVIDIA CUDA-X庫加速科學和工程發展

    NVIDIA GTC 全球 AI 大會上宣布,開發者現在可以通過 CUDA-X 與新一代超級芯片架構的協同,實現 CPU 和 GPU 資源間深度自動化整合與調度,相較于傳統加速計算架構,該技術可使計算工程工具運行速度提升至原來的 11 ,計算規模增加至 5
    的頭像 發表于 03-25 15:11 ?1529次閱讀

    BK25-600D24H1N4 BK25-600D24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK25-600D24H1N4相關產品參數、數據手冊,更有BK25-600D24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK25-600D24H1N4真
    發表于 03-24 18:41
    BK25-<b class='flag-5'>600</b>D24H1N4 BK25-<b class='flag-5'>600</b>D24H1N4

    BK25-600S24H1N4 BK25-600S24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK25-600S24H1N4相關產品參數、數據手冊,更有BK25-600S24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK25-600S24H1N4真
    發表于 03-24 18:41
    BK25-<b class='flag-5'>600</b>S24H1N4 BK25-<b class='flag-5'>600</b>S24H1N4

    BK20-600D24H1N4 BK20-600D24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK20-600D24H1N4相關產品參數、數據手冊,更有BK20-600D24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK20-600D24H1N4真
    發表于 03-24 18:40
    BK20-<b class='flag-5'>600</b>D24H1N4 BK20-<b class='flag-5'>600</b>D24H1N4

    BK20-600S24H1N4 BK20-600S24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK20-600S24H1N4相關產品參數、數據手冊,更有BK20-600S24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK20-600S24H1N4真
    發表于 03-24 18:40
    BK20-<b class='flag-5'>600</b>S24H1N4 BK20-<b class='flag-5'>600</b>S24H1N4

    詳解RTOS中的Hook函數

    Hook函數是RTOS中的一個關鍵特性,通過該函數,用戶可以增強對任務管理的控制,定義系統行為。
    的頭像 發表于 03-24 16:14 ?1077次閱讀

    BK15-600S24H1N4 BK15-600S24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK15-600S24H1N4相關產品參數、數據手冊,更有BK15-600S24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK15-600S24H1N4真
    發表于 03-20 18:54
    BK15-<b class='flag-5'>600</b>S24H1N4 BK15-<b class='flag-5'>600</b>S24H1N4

    BK5-600S24H1N4 BK5-600S24H1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)BK5-600S24H1N4相關產品參數、數據手冊,更有BK5-600S24H1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,BK5-600S24H1N4真值表,
    發表于 03-20 18:35
    BK5-<b class='flag-5'>600</b>S24H1N4 BK5-<b class='flag-5'>600</b>S24H1N4

    FA120-600S48G1N4 FA120-600S48G1N4

    電子發燒友網為你提供AIPULNION(AIPULNION)FA120-600S48G1N4相關產品參數、數據手冊,更有FA120-600S48G1N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,FA120-600S48G1
    發表于 03-19 18:32
    FA120-<b class='flag-5'>600</b>S48G1N4 FA120-<b class='flag-5'>600</b>S48G1N4

    解鎖TSMaster fifo函數:報文讀取的高效方法

    前言:TSMaster目前有兩種讀取報文的模式:回調函數模式和fifo模式。fifo函數是TSMaster近期新增的函數,本文將重點介紹fifo模塊。關于回調函數的使用方法可以參考幫助
    的頭像 發表于 03-14 20:04 ?1143次閱讀
    解鎖TSMaster fifo<b class='flag-5'>函數</b>:報文讀取的高效方法