python 求均值_数据分析:寻找Python最优计算性能
1、場景描述
在數(shù)據(jù)統(tǒng)計分析過程中,求累計值(總和)是最常用的統(tǒng)計指標之一,市面上的各種流行數(shù)據(jù)庫均支持的查詢方式基本如下:
select sum(c) from table_name;
當數(shù)據(jù)量在小規(guī)模時,sum只是一瞬間的事情,讓你感覺電腦真牛逼啊,我掰手指頭要算半天的數(shù),它居然可以這么快,下面是1萬多條數(shù)據(jù)的字段求和,只用了8ms。
但是當數(shù)據(jù)量不斷增長到一個量級時,比如說,先定個小目標:一億條訂單求總額,你可以嘗試在常規(guī)的數(shù)據(jù)庫上執(zhí)行同樣的語句需要多長時間。
在我的電腦上執(zhí)行這樣的查詢,大約需要10s。
或者更大的量級,十億、百億、萬億?你一秒鐘給我算出來,哈哈,電腦也算懵逼了。
采用分布式存儲、分布式計算,是目前解決大規(guī)模計算的通用方法,讓你吃100個饅頭,估計一禮拜也吃不完,做慈善,一人一個分給班里的同學,幾分鐘就沒了,吃不完的那個放學別走。
2、舉栗說明
今天我們不講分布式計算,先看看如何在單機上達到最優(yōu)的計算性能。
以下的示例,用python語言模擬求1億條訂單金額的平均值。
大家注意:我國小學生以后的課程都有python了,在未來編程是個基本技能。
2.1 首先用傳統(tǒng)的For Loop方式
還是一億條數(shù)據(jù)跑分
結(jié)果:
看來也不快啊,花了十幾秒,python在沒有特定優(yōu)化的前提下,比Java,Go語言慢了不少。
2.2 內(nèi)置 sum 函數(shù)上場
不過我們知道python有內(nèi)置的sum函數(shù),是不是會快一點?讓我們來試試:
結(jié)果:
不到十秒,快了一點點,但還是不理想。
2.3 神兵numpy
聽說有個numpy庫,可以向量化(vectorization)執(zhí)行各種運算,牽到臺上看看:
結(jié)果:
哎呀48毫秒,真心牛逼啊,足足快了幾百倍,比Go、Java都快,不信你可以自己寫個Go語言的版本對比一下。
2.3 沒完
聽說還有個叫numba的,看簡寫nb也很NB,要不把剛才的那些再跑一遍瞧瞧:
可以看出numba對For Loop的提升明顯,對內(nèi)置sum和numpy向量化影響不大。
來個最終對比圖,一目了然(柱子越低性能越好):
3、結(jié)論:磨刀不誤砍柴工
現(xiàn)在有些數(shù)據(jù)庫為了滿足OLAP的需求,已經(jīng)集成了向量化處理,通過測評,的確是顯著提高了數(shù)據(jù)分析統(tǒng)計的性能,限于篇幅,今天不在此展開了。
Python numpy庫主要提供:
ndarray,速度快且空間高效的多維array,可進行向量化算術(shù)操作和更高級推廣應用能力。
標準數(shù)學函數(shù),可快速執(zhí)行整個array上的數(shù)據(jù)操作,而不需要寫循環(huán):
比如說arr = np.array([[1.,2.,3.],[4.,5.,6.]]),可以進行arr * arr,arr * 0.5,1/arr等運算,這些運算都是對array中的元素做相應的計算,即向量化的操作。
歡迎關(guān)注公眾號:數(shù)獵天下DataHunter
-數(shù)據(jù)分析展示就用 DataHunter-
數(shù)據(jù)可視化大屏展示工具-免費試用?www.datahunter.cn?channel=weibo總結(jié)
以上是生活随笔為你收集整理的python 求均值_数据分析:寻找Python最优计算性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python冒泡排序_5种python方
- 下一篇: ae万能弹性表达式_AE脚本精品表达式合