Python:列表的子集尽可能均匀分布?

2024-04-20 14:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列可能的值,例如:

possible_values = range(100)

我有一个在该范围内包含非系统(但唯一)数字的列表,例如:

^{pr2}$

我想创建一个新的length<;len(somelist)列表,其中包含这些值的一个子集,但尽可能均匀地分布在可能的值范围内。例如:

length_newlist = 2
newlist = some_function(somelist, length_newlist, possible_values)
print(newlist)

理想情况下,它可以输出类似

[33, 77]

所以我既不需要随机样本,也不需要从等距整数中选择的样本。在这里,关于一个可能的区间上的均匀分布。 有没有一个功能或简单的方法来实现这一点?在


Tags: lt列表len系统rangefunction数字some
3条回答

我认为您应该检查random.sample(population, k)函数。它在k长度列表中对总体进行抽样。在

你的子集中离某个列表的轴最近的值呢?即:

def some_function(somelist, length_list, possible_values):
    a = min(possible_values)
    b = max(possible_values)
    chunk_size = (b-a)/(length_list+1)

    new_list = []
    for i in range(1,length_list+1):
        index = a+i*chunk_size
        new_list.append(min(somelist, key=lambda x:abs(x-index)))

    return new_list

possible_values = range(100)
somelist = [0, 5, 10, 15, 20, 33, 77, 99]
length_newlist = 2
newlist = some_function(somelist, length_newlist, possible_values)

print(newlist)

在任何情况下,我还建议查看一下numpy's random sampling函数,这对您也有帮助。在

假设您的范围是0..N-1,并且需要K<;=N-1值的列表。然后定义一个K值的“理想”列表,这将是您希望在这个完整列表中的分布(坦率地说,我不确定我是否理解这将是什么,但希望您能理解)。最后,从随机选择的大于K长度的子列表中选取与这些值最接近的匹配项,以获得正确分布的K长度随机子列表。在

相关问题 更多 >