按概率隨機選取

2021-09-22 07:31:43 字數 1008 閱讀 9731

據我了解,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 函式隨機的獲得乙個行數,從而隨機的取出一行,但是,當前的情況是不知道行數,這樣如何求呢?我們需要乙個概念來幫助我們做...