色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

詳解Python中的Pandas和Numpy庫

數據分析與開發 ? 來源:算法進階 ? 作者:泳魚 ? 2022-05-25 12:49 ? 次閱讀
pandas、numpy是Python數據科學中非常常用的庫,numpy是Python的數值計算擴展,專門用來處理矩陣,它的運算效率比列表更高效。 pandas是基于numpy的數據處理工具,能更方便的操作大型表格類型的數據集。但是,隨著數據量的劇增,有時numpy和pandas的速度就成瓶頸。如下我們會介紹一些優化秘籍:里面包含了 代碼層面的優化,以及可以無腦使用的性能優化擴展包。

1、NumExpr

NumExpr 是一個對NumPy計算式進行的性能優化。NumExpr的使用及其簡單,只需要將原來的numpy語句使用雙引號框起來,并使用numexpr中的evaluate方法調用即可。

經驗上看,數據有上萬條+ 使用NumExpr才比較優效果,對于簡單運算使用NumExpr可能會更慢。如下較復雜計算,速度差不多快了5倍。

importnumexprasne

importnumpyasnp

a=np.linspace(0,1000,1000)

print('#numpy十次冪計算')
%timeita**10

print('#numexpr十次冪計算')
%timeitne.evaluate('a**10')
7f5cc27c-d69d-11ec-bce3-dac502259ad0.png

2、Numba

Numba 使用行業標準的LLVM編譯器庫在運行時將 Python 函數轉換為優化的機器代碼。Python 中 Numba 編譯的數值算法可以接近 C 或 FORTRAN 的速度。

如果在你的數據處理過程涉及到了大量的數值計算,那么使用numba可以大大加快代碼的運行效率(一般來說,Numba 引擎在處理大量數據點 如 1 百萬+ 時表現出色)。numba使用起來也很簡單,因為numba內置的函數本身是個裝飾器,所以只要在自己定義好的函數前面加個@nb.方法就行,簡單快捷!
#pipinstallnumba

importnumbaasnb

#用numba加速的求和函數
@nb.jit()
defnb_sum(a):
Sum=0
foriinrange(len(a)):
Sum+=a[i]
returnSum

#沒用numba加速的求和函數
defpy_sum(a):
Sum=0
foriinrange(len(a)):
Sum+=a[i]
returnSum

importnumpyasnp
a=np.linspace(0,1000,1000)#創建一個長度為1000的數組
print('#python求和函數')
%timeitsum(a)
print('#沒加速的for循環求和函數')
%timeitpy_sum(a)
print('#numba加速的for循環求和函數')
%timeitnb_sum(a)
print('#numpy求和函數')
%timeitnp.sum(a)

7fdd3272-d69d-11ec-bce3-dac502259ad0.png

當前示例可以看出,numba甚至比號稱最接近C語言速度運行的numpy還要快5倍+,對于python求和速度快了幾百倍。。此外,Numba還支持GPU加速、矢量化加速方法,可以進一步達到更高的性能。
fromnumbaimportcuda
cuda.select_device(1)

@cuda.jit
defCudaSquare(x):
i,j=cuda.grid(2)
x[i][j]*=x[i][j]


#numba的矢量化加速
frommathimportsin
@nb.vectorize()
defnb_vec_sin(a):
returnsin(a)

3、CuPy

CuPy 是一個借助 CUDA GPU 庫在英偉達 GPU 上實現 Numpy 數組的庫。基于 Numpy 數組的實現,GPU 自身具有的多個 CUDA 核心可以促成更好的并行加速。

#pipinstallcupy
importnumpyasnp
importcupyascp
importtime

###numpy
s=time.time()
x_cpu=np.ones((1000,1000,1000))
e=time.time()
print(e-s)

###CuPy
s=time.time()
x_gpu=cp.ones((1000,1000,1000))
e=time.time()
print(e-s)
上述代碼,Numpy 創建(1000, 1000, 1000)的數組用了 1.68 秒,而 CuPy 僅用了 0.16 秒,實現了 10.5 倍的加速。隨著數據量的猛增,CuPy的性能提升會更為明顯。

4、pandas使用技巧

更多pandas性能提升技巧請戳官方文檔:https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html

4.1 按行迭代優化

我們按行對dataframe進行迭代,一般我們會用iterrows這個函數。在新版的pandas中,提供了一個更快的itertuples函數,如下可以看到速度快了幾十倍。

importpandasaspd
importnumpyasnp
importtime
df=pd.DataFrame({'a':np.random.randn(100000),
'b':np.random.randn(100000),
'N':np.random.randint(100,1000,(100000)),
'x':np.random.randint(1,10,(100000))})

%%timeit
a2=[]
forrowindf.itertuples():
temp=getattr(row,'a')
a2.append(temp*temp)
df['a2']=a2
%%timeit
a2=[]
forindex,rowindf.iterrows():
temp=row['a']
a2.append(temp*temp)
df['a2']=a2


80296156-d69d-11ec-bce3-dac502259ad0.png

4.2 apply、applymap優化

當對于每行執行類似的操作時,用循環逐行處理效率很低。這時可以用apply或applymap搭配函數操作,其中apply是可用于逐行計算,而applymap可以做更細粒度的逐個元素的計算。

#列a、列b逐行進行某一函數計算
df['a3']=df.apply(lambdarow:row['a']*row['b'],axis=1)
#逐個元素保留兩位小數
df.applymap(lambdax:"%.2f"%x)
8040ae24-d69d-11ec-bce3-dac502259ad0.png

4.3 聚合函數agg優化

對于某列將進行聚合后,使用內置的函數比自定義函數效率更高,如下示例速度加速3倍

%timeitdf.groupby("x")['a'].agg(lambdax:x.sum())

%timeitdf.groupby("x")['a'].agg(sum)

%timeitdf.groupby("x")['a'].agg(np.sum)
808b3192-d69d-11ec-bce3-dac502259ad0.png

4.4 文件操作

pandas讀取文件,pkl格式的數據的讀取速度最快,其次是hdf格式的數據,再者是讀取csv格式數據,而xlsx的讀取是比較慢的。但是存取csv有個好處是,這個數據格式通用性更好,占用內存硬盤資源也比較少。此外,對于大文件,csv還可以對文件分塊、選定某幾列、指定數據類型做讀取。

80dab5d2-d69d-11ec-bce3-dac502259ad0.png

4.5 pandas.eval

pandas.eval 是基于第一節提到的numexpr,pandas也是基于numpy開發的,numexpr同樣可以被用來對pandas加速)。使用eval表達式的一個經驗是數據超過 10,000 行的情況下使用會有明顯優化效果。
importpandasaspd
nrows,ncols=20000,100
df1,df2,df3,df4=[pd.DataFrame(np.random.randn(nrows,ncols))for_inrange(4)]

print('pd')
%timeitdf1+df2+df3+df4
print('pd.eval')
%timeitpd.eval("df1+df2+df3+df4")
8107c784-d69d-11ec-bce3-dac502259ad0.png

5、Cython優化

Cython是一個基于C語言的Python 編譯器,在一些計算量大的程序中,可以Cython來實現相當大的加速。考慮大部分人可能都不太了解復雜的cython語句,下面介紹下Cython的簡易版使用技巧。

通過在Ipython加入 Cython 魔術函數%load_ext Cython,如下示例就可以加速了一倍。進一步再借助更高級的cython語句,還是可以比Python快個幾十上百倍。

%%cython
deff_plain(x):
returnx*(x-1)
defintegrate_f_plain(a,b,N):
s=0
dx=(b-a)/N
foriinrange(N):
s+=f_plain(a+i*dx)
returns*dx
811fcdac-d69d-11ec-bce3-dac502259ad0.png

6、swifter

swifter是pandas的插件,可以直接在pandas的數據上操作。Swifter的優化方法檢驗計算是否可以矢量化或者并行化處理,以提高性能。如常見的apply就可以通過swifter并行處理。

importpandasaspd
importswifter

df.swifter.apply(lambdax:x.sum()-x.min())

7、Modin

Modin后端使用dask或者ray(dask是類似pandas庫的功能,可以實現并行讀取運行),是個支持分布式運行的類pandas庫,簡單通過更改一行代碼import modin.pandas as pd就可以優化 pandas,常用的內置的read_csv、concat、apply都有不錯的加速。注:并行處理的開銷會使小數據集的處理速度變慢。

818efa88-d69d-11ec-bce3-dac502259ad0.png

!pipinstallmodin
importpandas
importmodin.pandasaspd
importtime

##pandas

pandas_df=pandas.DataFrame({'a':np.random.randn(10000000),
'b':np.random.randn(10000000),
'N':np.random.randint(100,10000,(10000000)),
'x':np.random.randint(1,1000,(10000000))})



start=time.time()

big_pandas_df=pandas.concat([pandas_dffor_inrange(25)])

end=time.time()
pandas_duration=end-start
print("Timetoconcatwithpandas:{}seconds".format(round(pandas_duration,3)))

####modin.pandas
modin_df=pd.DataFrame({'a':np.random.randn(10000000),
'b':np.random.randn(10000000),
'N':np.random.randint(100,10000,(10000000)),
'x':np.random.randint(1,1000,(10000000))})

start=time.time()
big_modin_df=pd.concat([modin_dffor_inrange(25)])

end=time.time()
modin_duration=end-start
print("TimetoconcatwithModin:{}seconds".format(round(modin_duration,3)))

print("Modinis{}xfasterthanpandasat`concat`!".format(round(pandas_duration/modin_duration,2)))

81bc89b2-d69d-11ec-bce3-dac502259ad0.png

原文標題:Pandas、Numpy 性能優化秘籍

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

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

    關注

    0

    文章

    606

    瀏覽量

    28595
  • python
    +關注

    關注

    56

    文章

    4799

    瀏覽量

    84820
  • 性能優化
    +關注

    關注

    0

    文章

    18

    瀏覽量

    7439

原文標題:Pandas、Numpy 性能優化秘籍

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

收藏 人收藏

    評論

    相關推薦

    使用Python進行串口通信的案例

    當然!以下是一個使用Python進行串口通信的簡單示例。這個示例展示了如何配置串口、發送數據以及接收數據。我們將使用 pyserial ,這是一個非常流行的用于串口通信的Python
    的頭像 發表于 11-22 09:11 ?290次閱讀

    如何使用Python構建LSTM神經網絡模型

    構建一個LSTM(長短期記憶)神經網絡模型是一個涉及多個步驟的過程。以下是使用Python和Keras構建LSTM模型的指南。 1. 安裝必要的 首先,確保你已經安裝了Python
    的頭像 發表于 11-13 10:10 ?441次閱讀

    Python解析:通過實現代理請求與數據抓取

    Python,有多個可以幫助你實現代理請求和數據抓取。這些提供了豐富的功能和靈活的API,使得你可以輕松地發送HTTP請求、處理響應、解析HTML/XML/JSON數據,以及進
    的頭像 發表于 10-24 07:54 ?191次閱讀

    Python建模算法與應用

    上成為理想的腳本語言,特別適用于快速的應用程序開發。本文將詳細介紹Python在建模算法的應用,包括常見的建模算法、Python在建模的優勢、常用
    的頭像 發表于 07-24 10:41 ?586次閱讀

    Python在AI的應用實例

    Python在人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python在AI的幾個關鍵應用
    的頭像 發表于 07-19 17:16 ?1180次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發表于 07-16 10:38 ?1267次閱讀

    Python的人工智能框架與實例

    在人工智能(AI)領域,Python因其簡潔的語法、豐富的和強大的社區支持,成為了最受歡迎的編程語言之一。本文將詳細介紹Python的人工智能框架,并通過具體實例展示如何使用這些框
    的頭像 發表于 07-15 14:54 ?1754次閱讀

    DongshanPI-AICT全志V853開發板搭建YOLOV5-V6.0環境

    我建議在Conda命令單獨安裝所需的依賴,查漏補缺,缺少了哪個依賴包就補充哪一個即可。 pip install opencv-python==4.7.0.68 -i https
    發表于 07-12 09:59

    pytorch如何訓練自己的數據

    (https://pytorch.org/)來獲取安裝指令。安裝完成后,我們還需要安裝一些常用的,如NumPyPandas、Matplotlib等。 pip install torch n
    的頭像 發表于 07-11 10:04 ?559次閱讀

    深度學習常用的Python

    深度學習作為人工智能的一個重要分支,通過模擬人類大腦中的神經網絡來解決復雜問題。Python作為一種流行的編程語言,憑借其簡潔的語法和豐富的支持,成為了深度學習研究和應用的首選工具。本文將深入探討
    的頭像 發表于 07-03 16:04 ?668次閱讀

    ESP32下如何加自定義Python

    我看官方有提供Micropython的bin文件,但我想根據自己外設擴充一下Python,這個應該從哪里入手? 之前做過RTT系統的python擴充,RTT有提供Micropyth
    發表于 06-18 06:27

    python 學習:在內網 python-numpy 安裝方法,升級pip3版本的指令

    \\\\numpy-1.26.4-cp311-cp311-win_amd64.whl 內網升級pip 升級版本的指令: python.exe -m pip install --upgrade pip--proxy \"http
    發表于 04-22 17:18

    pythonopen函數的用法詳解

    pythonopen函數的用法詳解 Python的open()函數用于打開文件。它接受文件名和模式作為參數,并返回一個文件對象。文件對象
    的頭像 發表于 01-30 15:31 ?2169次閱讀

    eda工具軟件有哪些 EDA工具有什么優勢

    和預測提供基礎。在進行EDA過程,使用合適的工具軟件可以顯著提升效率和準確性。本文將介紹幾種常見的EDA工具軟件。 Python和其相關的 Python是一種廣泛使用的編程語言,擁
    的頭像 發表于 01-30 13:57 ?1179次閱讀

    基于NumPy的機器學習算法實現

    David Bourgin 表示他一直在慢慢寫或收集不同模型與模塊的純 NumPy 實現,它們跑起來可能沒那么快,但是模型的具體過程一定足夠直觀。每當我們想了解模型 API 背后的實現,卻又不想看復雜的框架代碼,那么它可以作為快速的參考。
    發表于 01-17 12:36 ?210次閱讀
    基于<b class='flag-5'>NumPy</b>的機器學習算法實現
    主站蜘蛛池模板: 一区一区三区产品| 伸进同桌奶罩里摸她胸作文| 国产高清精品国语特黄A片| 最近中文字幕高清中文| 亚洲欧洲日产国码中学| 亚洲国产五月综合网| 校园纯肉H教室第一次| 特污兔午夜影视院| 无码AV免费精品一区二区三区 | 亚洲成人免费观看| 午夜视频在线瓜伦| 小小水蜜桃3视频在线观看| 午夜亚洲动漫精品AV网站| 香蕉99久久久久成人麻豆| 亚洲 欧美 国产 综合 在线| 亚欧成人毛片一区二区三区四区| 校园刺激全黄H全肉细节文| 亚洲国产精品第一影院在线观看| 亚洲精品tv久久久久久久久久| 亚洲 欧美无码原创区| 亚洲精品无码成人AAA片| 妖精视频免费看| 123成人站| voyeurhit农村夫妻偷拍| 调教日本美女| 国产精品美女久久久网站动漫 | 青青草色青伊人| 日日天干夜夜狠狠爱| 无码AV熟妇素人内射V在线| 性xxx免费| 樱桃BT在线观看| 99re久久精品在线播放| 成人国产三级在线播放| 国产成人精品三级在线| 好湿好滑好硬好爽好深视频| 久久久性色精品国产免费观看| 免费看国产精品麻豆| 日韩欧美精品有码在线播放| 亚洲 欧美 国产 综合五月天| 一级毛片免费视频网站| MELODY在线播放无删减|