zoukankan      html  css  js  c++  java
  • 算法题---按概率抽样获取相应的样本

    """
    按概率抽样
    [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())
  • 相关阅读:
    实现一个简单的ConnectionPool
    并发连接MySQL
    C#里面滥用String造成的性能问题
    String.IndexOf
    C#代码中插入X86汇编
    正确理解Handle对象
    orleans发送广播消息
    log日志方法
    PHP 批量插入数据
    逻辑漏洞小结之SRC篇
  • 原文地址:https://www.cnblogs.com/syw-home/p/13930151.html
Copyright © 2011-2022 走看看