理論基礎
以圖為例,凡是4代表的就是概率型別數的意思
a,記錄下面那些部分的概率值(乘以4以後)
b,記錄上面部分來自哪個根柱子,用哪根柱子的不來用來補足,使之概率為1
:param probs: 是乙個概率的list
:return:
"""num =
len(probs)
a = np.zeros(num, dtype=np.float32)
b = np.ones(num, dtype=np.
int)*-
1# -1 用來表示,本身自己就足夠了,和那些用第一根柱子(下標0)的區分開來
small, large =
,# 記錄乘以4以後的概率 大於1還是小於1 的下標
for i, prob in
enumerate
(probs)
: a[i]
= num * prob # 概率乘以型別數(4)
if a[i]
<
1.0:
else
:while
len(small)
>
0and
len(large)
>0:
smaller = small.pop(
)# 從大小中各任取乙個
larger = large.pop(
) a[larger]
= a[smaller]
+ a[larger]
-1.0
# a用來記錄本身的概率,而不是加上去的那一部分的概率
b[smaller]
= larger # b用來記錄完成每個柱子=1的操作,補自哪個柱子
if a[larger]
<
1.0:
# 記錄大於1的那個概率,給了別人以後,剩下部分是不是還是大於1(是不是還能繼續給別人)
else
:return a, b
>>
>
print
(alias_setup(
[0.4
,0.1
,0.2
,0.3])
)(array([1
.,0.4,
0.8,
0.39999998
], dtype=float32)
, array([-
1,3,
3,0]
))>>
>
print
(alias_setup(
[0.2
,0.3
,0.1
,0.4])
)(array(
[0.8,1
.,0.4,
0.79999995
], dtype=float32)
, array([3
,-1,
3,1]
))
python 抽樣 python實現抽樣分布描述
本次使用木東居士提供資料案例,驗證資料分布等內容,資料讀取 df pd.read excel c users zxy desktop usecols 1,2,3 1.按照港口分類,計算各類港口資料 年齡 車票 的統計量。df1 df.groupby embarked df1.describe 或 變...
水庫抽樣演算法
輸入 一組資料,大小未知 輸出 這組資料的k個均勻抽取 要求 僅掃瞄一次 總體要求 從n個元素中隨機的抽取k個元素,其中n無法確定,保證每個元素抽到的概率相同 一些符號 k為要抽樣的個數,n為總體個數字置,n為當前遍歷的元素的位置。pool為k大小的陣列,用來儲存抽到的樣本 n k,把當前值放入po...
水塘抽樣演算法
作用 水塘抽樣演算法是一種抽樣演算法,對於乙個很大的集合,抽取的樣本值能夠保證隨機.特點 其複雜度並不很高o n 並且能夠很大程度地節省記憶體.很多大公司的面試題都考察過這個演算法,以谷歌為例,有一道關於水塘抽樣的例題 我有乙個長度為n的鍊錶,n的值非常大,我不清楚n的確切值.我怎樣能寫乙個盡可能高...