本篇內容介紹了“python numexpr怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
公司主營業(yè)務:成都網(wǎng)站設計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出鹽田免費做網(wǎng)站回饋大家。
python語言被廣泛用于數(shù)據(jù)分析和機器學習。但是,由于python的底層特性,python的運行速率低一直被廣泛詬病。其中,numpy和pandas的廣泛使用已經(jīng)將數(shù)據(jù)處理和機器學習的速率提升了幾個檔次。
但是,隨著數(shù)據(jù)的越來越多,很多人已經(jīng)不再滿足numpy和pandas的速度,從而退出了一批加速優(yōu)化拓展包。這篇文章主要介紹一個輕量、但是功能強大的python擴展包 ”NumExpr",看看它是如何高效解析數(shù)學公式的。
NumExpr的使用及其簡單,只需要將原來的numpy語句使用雙引號框起來,并使用numexpr中的evaluate方法調用即可。
第一步:需要引入 numexpr 和 numpy 擴展包;
import numexpr as ne
import numpy as np
第二步:創(chuàng)建兩個numpy的array - a 和 b;
a和b兩個所包含的數(shù)據(jù)個數(shù)為100萬個。
當我們需要執(zhí)行簡單的加減乘除的時候,numexpr的效率已經(jīng)得到了很好地體現(xiàn)。如上圖所示,通過執(zhí)行 2 * a + 3 * b,如果直接操作,需要3.39 毫秒。但是,如果我們是用ne.evaluate加速,可以將時間縮短至1.55 毫秒。
numexpr在更加復雜的數(shù)學表達式運算中,表現(xiàn)到底如何呢?
當我們使用如上所示的數(shù)學表達式,正常執(zhí)行需要28.3 ms。而通過numexpr的加速,只需要3.03 ms。
注意,numexpr是可以識別 sin 函數(shù)的,所以我們不需要在evaluate里面寫np.sin,可以直接寫 sin。
總結:處理數(shù)據(jù)量越大,數(shù)學計算越復雜,則numexpr的加速效果越明顯。
numpy 和 numexpr 比較
我們可以看到,當np.array的元素個數(shù)超過10e8,加速效果更加顯著。
numexpr也支持邏輯表達式和復數(shù)表達式的加速,有興趣的讀者朋友可以自行比較。
numexpr還有一個重要的加速利器,多線程操作。通過 ne.set_num_threads(1) 可以設置線程的數(shù)量,更多的線程表示程序可以同時對數(shù)學表達式進行計算。
如上所示,如果我們設置單線程,程序運行需要13.4 ms。設置了雙線程,速度則可以提升一倍。
numexpr的設計主要針對的是numpy。同樣的,我們知道pandas也是基于numpy開發(fā)的。自然,numexpr同樣可以被用來對pandas加速。
pandas中有一個eval方法就是運用了numexpr,對pandas代碼進行優(yōu)化加速。
當我們構建幾個pandas的dataframe,然后對它們進行運算的時候,pd.eval 可以將程序從原先的47.4 ms 加速到17.6 ms。
“python numexpr怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
名稱欄目:pythonnumexpr怎么使用
標題網(wǎng)址:http://www.ekvhdxd.cn/article22/jcgdcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)頁設計公司、網(wǎng)站設計、App開發(fā)、網(wǎng)站維護、手機網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)