Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带概率的Python随机列表索引_Python - Fatal编程技术网

带概率的Python随机列表索引

带概率的Python随机列表索引,python,Python,如何编写一个函数,根据列表中的概率给出列表元素的随机索引 列表如下所示,包含5个元素 a = [0.1, 0.2, 0.4, 0.2, 0.1] 有没有简单快速的解决方案?谢谢如果您有NumPy,它可能会更快,但如果没有,这里有一个纯Python解决方案 from random import random a = [0.1, 0.2, 0.4, 0.2, 0.1] def randombin(bins): r = random() p = 0 for i, v in

如何编写一个函数,根据列表中的概率给出列表元素的随机索引

列表如下所示,包含5个元素

a = [0.1, 0.2, 0.4, 0.2, 0.1]

有没有简单快速的解决方案?谢谢

如果您有NumPy,它可能会更快,但如果没有,这里有一个纯Python解决方案

from random import random

a = [0.1, 0.2, 0.4, 0.2, 0.1]

def randombin(bins):
    r = random()
    p = 0
    for i, v in enumerate(bins):
        p += v
        if r < p:
           return i
    # p may not equal exactly 1.0 due to floating-point rounding errors
    # so if we get here, just try again (the errors are small, so this
    # should not happen very often).  You could also just put it in the
    # last bin or pick a bin at random, depending on your tolerance for
    # small biases
    return randombin(bins)

print randombin(a)
从随机导入随机
a=[0.1,0.2,0.4,0.2,0.1]
def随机箱(箱):
r=随机()
p=0
对于枚举中的i、v(箱):
p+=v
如果r
这听起来像是的作业,其
p
参数:

因此,如果只有一个列表(其中一个元素既是每个元素的概率,也是要选择的元素本身),您可以这样做:

from numpy.random import choice

elementsAndProbabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(elementsAndProbabilities, p=elementsAndProbabilities)
print randomElement
from numpy.random import choice

elements = ["first", "second", "third", "fourth", "fifth"]
probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]    

randomElement = choice(elements, p=probabilities)
print randomElement
from numpy.random import choice

probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(range(len(probabilities)), p=probabilities)
print randomElement
如果您有一个元素列表和每个元素的概率列表(单独),您可以这样做:

from numpy.random import choice

elementsAndProbabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(elementsAndProbabilities, p=elementsAndProbabilities)
print randomElement
from numpy.random import choice

elements = ["first", "second", "third", "fourth", "fifth"]
probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]    

randomElement = choice(elements, p=probabilities)
print randomElement
from numpy.random import choice

probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(range(len(probabilities)), p=probabilities)
print randomElement
现在,你说你想要的是索引,而不是元素,所以我们可以得到如下索引:

from numpy.random import choice

elementsAndProbabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(elementsAndProbabilities, p=elementsAndProbabilities)
print randomElement
from numpy.random import choice

elements = ["first", "second", "third", "fourth", "fifth"]
probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]    

randomElement = choice(elements, p=probabilities)
print randomElement
from numpy.random import choice

probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]

randomElement = choice(range(len(probabilities)), p=probabilities)
print randomElement

我想这就是你要找的:不是重复的。这个问题有一些不同的细节。