我有一个列表
a = [.5,.57,.67,.8,1,1.33,2,4]
我需要在此列表中随机选择一个数字。在Python中,我通常会这样:
c = random.choice(a)
除此之外......这样做会使选择偏向较低的值(密度高于1左右,而不是4左右)。
我如何根据统一分布选择列表条目。如在c = random.random()* 3.5 + .5中,但实际从列表中选择?
答案 0 :(得分:1)
您可以从统一分布中获取浮点数,然后选择列表中最接近此生成值的浮点数。像这样:
a = [.5,.57,.67,.8,1,1.33,2,4]
p = map(lambda x: abs(random.uniform(0,4) - x), a)
c = a[p.index(min(p))]
当然,鉴于您的列表已经排序,您可以更有效地完成它。
答案 1 :(得分:-1)
首先将所有元素按照其值划分为十组,然后从每组中随机选择特定数量(例如200个)的元素
g1 = []
g2 = []
g3 = []
g4 = []
g5 = []
g6 = []
g7 = []
g8 = []
g9 = []
g10 = []
for i, row in df.iterrows():
if 0 <= row['attr'] < 0.1:
g1.append(row['file_name'])
elif 0.1 <= row['attr'] < 0.2:
g2.append(row['file_name'])
elif 0.2 <= row['attr'] < 0.3:
g3.append(row['file_name'])
elif 0.3 <= row['attr'] < 0.4:
g4.append(row['file_name'])
elif 0.4 <= row['attr'] < 0.5:
g5.append(row['file_name'])
elif 0.5 <= row['attr'] < 0.6:
g6.append(row['file_name'])
elif 0.6 <= row['attr'] < 0.7:
g7.append(row['file_name'])
elif 0.7 <= row['attr'] < 0.8:
g8.append(row['file_name'])
elif 0.8 <= row['attr'] < 0.9:
g9.append(row['file_name'])
else:
g10.append(row['file_name'])
print(len(g1),len(g2),len(g3),len(g4),len(g5),len(g6),len(g7),len(g8),len(g9),len(g10))
print(len(g1)+len(g2)+len(g3)+len(g4)+len(g5)+len(g6)+len(g7)+len(g8)+len(g9)+len(g10))
random.seed(42)
file_lst_sub = random.sample(g1,200)+random.sample(g2,200)+random.sample(g3,200)+\
random.sample(g4,200)+random.sample(g5,200)+random.sample(g6,200)+\
random.sample(g7,200)+random.sample(g8,200)+random.sample(g9,200)