def sample(population, k, prob = None):
import random
from bisect import bisect
from operator import itemgetter
def cdf(population, k, prob):
population = map(itemgetter(1), sorted(zip(prob, population)))
_cumm = [prob[0]]
for i in range(1, len(P)):
_cumm.append(_cumm[-1] + P[i])
return [population[bisect(_cumm, random.random())] for i in range(k)]
if prob == None:
return random.sample(population, k)
else:
return cdf(population, k, prob)
您需要使用累积分布函数(或者使用numpy或者自己编写),并将向量压缩到一起以实现您想要实现的目标
实施
示例
相关问题 更多 >
编程相关推荐