我有一个通过某一质量函数排序的列表,我想要从中取出元素,优先选择列表开头的好元素。
目前,我生成随机索引的函数大致如下:
def pick():
p = 0.2
for i in itertools.count():
if random.random() < p:
break
return i
它做得很好,但我想知道:
- 生成的随机分布的名称是什么?
- Python 中是否有内置函数可以实现该分布?
您可以通过指数来模拟它,但这就像让方形木棍配圆形孔。正如Mark所说的那样,这是几何分布-离散的,向右偏移1。而且它就在numpy中:
import numpy as np
import random
import itertools
import matplotlib.pyplot as plt
p = 0.2
def pick():
for i in itertools.count():
if random.random() < p:
break
return i
q = np.random.geometric(p, size = 100000) - 1
z = [pick() for i in range(100000)]
bins = np.linspace(-0.5, 30.5, 32)
plt.hist(q, bins, alpha=0.2, label='geom')
plt.hist(z, bins, alpha=0.2, label='pick')
plt.legend(loc='upper right')
plt.show()
输出: