按比例获得样本数据或执行每日任务
开发工具
win 10
python 3.6.5
要求
已经知道每个分类的样本占比数,及样本数量 ,必须按比例获得这种分类的样本 。例如,是我4种每日任务要执行,各自为每日任务A ,每日任务B,每日任务C,每日任务D, 规定执行的总任务次数为100000 ,且不一样分类每日任务执行次数占有率为 A:B:C:D = 3:5:7:9,且在宏观经济上这种每日任务另外开展
编码完成
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' import time from copy import deepcopy def main(): class_propotion_map = {'A':3, 'B':5, 'C':7, 'D':7} # 分类及样本数比例投射 class_list = [] # 分类 class_proption_list = [] # 储放分类样本数比例 for class_type, propotion in class_propotion_map.items(): # 同一个循环系统,能够确保比例数据库索引和相匹配分类数据库索引一一对应 class_list.append(class_type) class_proption_list.append(propotion) temp_class_propotion_list = deepcopy(class_proption_list) result = [] t1 = time.time() total_sample_num = 100000 #每日任务执行次数 for i in range(1, total_sample_num 1): max_propotion = max(temp_class_propotion_list) if max_propotion > 0: index = temp_class_propotion_list.index(max_propotion) result.append(class_list[index]) temp_class_propotion_list[index] -= 1 elif max_propotion == 0 and min(temp_class_propotion_list) == 0: temp_class_propotion_list = deepcopy(class_proption_list) index = temp_class_propotion_list.index(max(temp_class_propotion_list)) result.append(class_list[index]) temp_class_propotion_list[index] -= 1 t2 = time.time() from collections import Counter c = Counter(result) for item in c.items(): print(item[0], item[1]/total_sample_num) print('用时:%s'%(t2-t1)) main()
运作結果
表明
之上方法大概完成构思便是,获得每个分类样本数所占比例团本数据列表 ,随后每一次从这当中获得较大 比例值,并搜索该比例值相匹配的分类(获得分类后就可以依据必须结构、获得分类样本数据),寻找总体目标分类后 ,把比例数据信息团本中该比例值减1,直至较大 比例和最少比例都相当于0,然后重设比例团本数据信息为样本数比例值 ,反复前边的全过程,直至样本数实现目标样本数量,这类方法完成的前提条件是得提早了解样本数量及不一样分类样本数所占比例 ,且比例数值整数金额