溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python多維數(shù)組分位數(shù)的求取方式

發(fā)布時(shí)間:2020-09-21 11:25:05 來(lái)源:腳本之家 閱讀:163 作者:zhongshaoyy 欄目:開(kāi)發(fā)技術(shù)

在python中計(jì)算一個(gè)多維數(shù)組的任意百分比分位數(shù),只需用np.percentile即可,十分方便

import numpy as np
a = [154, 400, 1124, 82, 94, 108]
print np.percentile(a,95) # gives the 95th percentile

補(bǔ)充拓展:如何解決hive同時(shí)計(jì)算多個(gè)分位數(shù)的問(wèn)題

眾所周知,原生hive沒(méi)有計(jì)算中位數(shù)的函數(shù)(有的平臺(tái)會(huì)有),只有計(jì)算分位數(shù)的函數(shù)percentile

在數(shù)據(jù)量不大的時(shí)候,速度尚可。但是數(shù)據(jù)量一上來(lái)之后,完全計(jì)算不出來(lái)。

那么如何解決這個(gè)問(wèn)題呢,我們可以使用 row_number() over()通過(guò)兩次排序來(lái)解決同時(shí)計(jì)算多個(gè)分位數(shù),速度飛快。

比如我們需要計(jì)算mkt_mcc_storeidx表下以mkt_label,mccgroup,month分組,value_mccgroup的分位數(shù)

第一步:利用row_number() over()給value_mccgroup在分組里排序,記錄下排名

python多維數(shù)組分位數(shù)的求取方式

第二步:計(jì)算mkt_label,mccgroup,month分組下的數(shù)據(jù)總數(shù)

python多維數(shù)組分位數(shù)的求取方式

第三步:join前兩步的結(jié)果,取rank=你需要計(jì)算的分位數(shù)位置,想計(jì)算多少個(gè)分位數(shù)就計(jì)算多少個(gè)

python多維數(shù)組分位數(shù)的求取方式

第四步:再排一次序,這次數(shù)據(jù)量就已經(jīng)少了很多了,畢竟每組里面只有幾個(gè)數(shù)據(jù),記錄排名

python多維數(shù)組分位數(shù)的求取方式

第五步:得到具體的分位數(shù)

python多維數(shù)組分位數(shù)的求取方式

第六步:行轉(zhuǎn)成列,所有分位數(shù)計(jì)算完畢

python多維數(shù)組分位數(shù)的求取方式

后來(lái)查看了下SQL代碼的執(zhí)行樹(shù),發(fā)現(xiàn)percentile利用了map來(lái)存數(shù)據(jù),怪不得這么耗內(nèi)存,其實(shí)時(shí)間久并不是算的時(shí)間久,是因?yàn)閮?nèi)存不夠了,系統(tǒng)一直在回收內(nèi)存

python多維數(shù)組分位數(shù)的求取方式

而rank over 僅僅就是個(gè)排序而已

python多維數(shù)組分位數(shù)的求取方式

以上這篇python多維數(shù)組分位數(shù)的求取方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI