"""
按概率抽样
[0.1, 0.5, 0.4] 给出这个概率数组,对每个概率打上label
0 - 0.1
1 - 0.5
2 - 0.4
求按照上述比例,获取相应概率的label
"""
import random
import logging
import bisect
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',)
class Sampling(object):
def __init__(self, array_prob):
self.source_array = array_prob
def output_label(self):
tmp = 0
new_array = []
for num in self.source_array:
tmp += num
new_array.append(tmp)
new_array.insert(0, 0)
rand_num = random.random()
logging.info("random num is %s" % rand_num)
length = len(new_array)
for index in range(0, length-1):
left = new_array[index]
right = new_array[index + 1]
if left <= rand_num <= right:
return index
def output_label2(self):
tmp = 0
new_array = []
for num in self.source_array:
tmp += num
new_array.append(tmp)
new_array.insert(0, 0)
ret = bisect.bisect_left(new_array, random.random())
return ret
if __name__ == "__main__":
s = Sampling([0.1, 0.5, 0.4])
print(s.output_label())