根据均匀分布从列表中随机选择数字

问题描述 投票:2回答:2

我有这样的清单

a = [.5,.57,.67,.8,1,1.33,2,4]

绘制时如下图所示:enter image description here

我需要在此列表中随机选择一个数字。在Python中,我通常会这样:

c = random.choice(a)

除外...这样做会使拾取偏向一个较低的值(密度在1左右比在4左右高)。

我将如何根据统一分布选择列表条目。如c = random.random()* 3.5 + .5,但实际上是从列表中选择的?]

我有一个这样的列表= [.5,.57,.67,.8,1,1.33,2,4]绘制时看起来像这样:我需要在该列表中随机选择一个数字。在Python中,通常会这样:c = random.choice(...

python random
2个回答
1
投票

您可以从统一分布中获取浮点数,然后从列表中选择最接近此生成值的那一个。像这样:


0
投票
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,300)



© www.soinside.com 2019 - 2024. All rights reserved.