python:按照一定概率从列表中选择元素
python: choose element from a list following a certain probability
我正在寻找一个 python 函数,它允许我在给定列表和特定概率的情况下 return 仅 "pass" 彩票的元素。例如:
my_list = ['A', 'B', 'C']
my_probability = 0.66 # The probability for an element to stay in the list
winner = THE_RANDOM_FUNCTION(my_list, my_probability)
print(winner)
>> ['A', 'C'] # Could be a different result but that only an example
所以我希望函数对列表中的每个元素进行抽签(以给定的概率),如果通过抽签则将其保留在结果列表中。
标准库中有这样的函数吗?我应该实现吗?
听起来你的意思是你想选择或不选择每个元素,
以给定的概率。这里有几个简单的解决方案:
filter(lambda x: random.random() < my_probability, my_list)
[x for x in my_list if random.random() < my_probability]
对我来说,这看起来像是一个经典的二项式试验。
In [1]: import numpy as np
In [2]: my_list = ['A', 'B', 'C']
In [3]: prob = 0.66
In [4]: mask = np.random.binomial(1, prob, len(my_list))
In [5]: selected = [elem for keep, elem in zip(mask, my_list) if keep]
In [6]: selected
Out[6]: ['A', 'B']
或者如果您不需要将最终结果保留为列表,您可以采用纯 Numpy 方式
In [7]: my_arr = np.array(my_list)
In [8]: my_arr[mask.astype(bool)]
Out[8]:
array(['A', 'B'], dtype='<U1')
我正在寻找一个 python 函数,它允许我在给定列表和特定概率的情况下 return 仅 "pass" 彩票的元素。例如:
my_list = ['A', 'B', 'C']
my_probability = 0.66 # The probability for an element to stay in the list
winner = THE_RANDOM_FUNCTION(my_list, my_probability)
print(winner)
>> ['A', 'C'] # Could be a different result but that only an example
所以我希望函数对列表中的每个元素进行抽签(以给定的概率),如果通过抽签则将其保留在结果列表中。
标准库中有这样的函数吗?我应该实现吗?
听起来你的意思是你想选择或不选择每个元素, 以给定的概率。这里有几个简单的解决方案:
filter(lambda x: random.random() < my_probability, my_list)
[x for x in my_list if random.random() < my_probability]
对我来说,这看起来像是一个经典的二项式试验。
In [1]: import numpy as np
In [2]: my_list = ['A', 'B', 'C']
In [3]: prob = 0.66
In [4]: mask = np.random.binomial(1, prob, len(my_list))
In [5]: selected = [elem for keep, elem in zip(mask, my_list) if keep]
In [6]: selected
Out[6]: ['A', 'B']
或者如果您不需要将最终结果保留为列表,您可以采用纯 Numpy 方式
In [7]: my_arr = np.array(my_list)
In [8]: my_arr[mask.astype(bool)]
Out[8]:
array(['A', 'B'], dtype='<U1')