算法题---按概率抽样获取相应的样本

"""
按概率抽样
[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())

 

posted @ 2020-11-05 09:54  威威后花园  阅读(336)  评论(0编辑  收藏  举报