Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7263474
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: Python/Ruby

2020-04-21 19:20:45

from itertools import groupby


lst= [
    2648, 2648, 2648, 63370, 63370, 425, 425, 120,
    120, 217, 217, 189, 189, 128, 128, 115, 115, 197,
    19752, 152, 152, 275, 275, 1716, 1716, 131, 131,
    98, 98, 138, 138, 277, 277, 849, 302, 152, 1571,
    68, 68, 102, 102, 92, 92, 146, 146, 155, 155,
    9181, 9181, 474, 449, 98, 98, 59, 59, 295, 101, 5
]
for k, g in groupby(sorted(lst), key=lambda x: x//50):
    print('{}-{}: {}'.format(k*50, (k+1)*50-1, len(list(g))))


####################################
lst2=[]
fh = open('./aa3.txt')
for line in fh.readlines():
    lst2.append(float(line) *1)


len2 = len(lst2)
v_step=0.02
for k, g in groupby(sorted(lst2), key=lambda x: x//v_step):
    print('{}-{}: {}'.format(k*v_step, (k+1)*v_step, len(list(g)))))






=========================函数实现

#data 数组
total_sec_num 欲分几段
#
v_step  切分单位
def get_section(data,total_sec_num, v_step = 0.005):
    out =[]
    
    var_total =100
    left_sec_num =total_sec_num
    each_sect_var = var_total/left_sec_num


    len_total = len(data)
    sect_var = 0
    mink =  0;
    maxk =  0;
    
    
    for k, g in groupby(sorted(lst2), key=lambda x: x//v_step):
        maxk =  (k+1)*v_step;
        
        tmp = float(100*len(list(g)))
        sect_var += np.round(tmp/len_total,5) 


           
        if sect_var >each_sect_var and left_sec_num>ZERO_FLOAT :
            o={}
            o['mink'] =  np.round(mink,3)
            o['maxk'] =  np.round(maxk,3)
            o['var'] =   np.round(sect_var,3)
            out.append(o)
            
            var_total -= sect_var
            left_sec_num -= 1
            if left_sec_num > ZERO_FLOAT: #next
                each_sect_var = var_total/left_sec_num
                        
            sect_var = 0
            mink =  maxk;
    print left_sec_num, sect_var,mink,maxk         
    if sect_var> ZERO_FLOAT: 
        o={}
        o['mink'] =  np.round(mink,3)
        o['maxk'] =  1
        o['var'] =   np.round(sect_var,3)
        out.append(o)
        
    return out
      
t = 0      
o =  get_section(lst2,5,0.0005)  


阅读(1758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~