據我了解,random.choice(seq)
是等概率選取乙個,不是我想要的。而numpy.random.choice(seq, p, k)
是按概率隨機重複選取多個,這正是我想要的。
但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。
特此將**記錄如下:
import
random
# 根據概率隨機選取
defrandom_choice
(seq, prob, k=1
):'''
功能:按給定概率prob,從seq中選取元素。可重複k次
注意1. seq, prob長度要相等
2. prob的概率和要等於1
3. k 表示重複選取的次數,預設為1次
4. 結果返回list
5. 用到了random模組的random()函式
例子:>>> random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35])
['d']
>>> random_choice('abcd', [0.4, 0.15, 0.1, 0.35], k=5)
['d','d','b','a','d']
''' res =
forj in
range(k):
p = random.random()
fori in
range(len(seq)):
ifsum(prob[:i]) < p <=
sum(prob[:i+1
]): return
res# 測試
deftest
():print(random_choice(['a'
,'b'
,'c'
,'d'
], [0.4, 0.15, 0.1, 0.35], k=
5))test()
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...
海量資料等概率隨機選取問題
1 問題定義可以簡化如下 在不知道檔案總行數的情況下,如何從檔案中隨機的抽取一行?首先想到的是我們做過類似的題目嗎?當然,在知道檔案行數的情況下,我們可以很容易的用c執行庫的rand 函式隨機的獲得乙個行數,從而隨機的取出一行,但是,當前的情況是不知道行數,這樣如何求呢?我們需要乙個概念來幫助我們做...