gpt4 book ai didi

python - 将相似范围的数字组合在一起的功能?

转载 作者:行者123 更新时间:2023-12-05 05:11:25 24 4
gpt4 key购买 nike

我有一个数字列表,我想根据它们之间的接近程度将它们分成不同的组

List1=[1.8, 1.1, 1.9, 11, 9, 10, 36, 39, 44, 20]

当我看到这个列表时,我立即知道有 4 组数字,前 3 个属于一组,接下来的 3 个属于一组,接下来的 3 个属于一组,最后一个数字 (20) 属于在自己的一组中。我不太确定我是怎么做到的,但我想其他人可能会同意我的看法

我在想什么来确定这一点?有没有在 python 中执行此操作的函数?

最佳答案

您的示例数据和直觉对应于以下规则:“如果两个值之间的距离不超过从整个组中值之间的平均距离中删除的 1 个标准差,则它们属于同一组。”

下面是同样的代码:

from statistics import stdev

# sort the data, for simplicity
data = sorted([1.8, 1.1, 1.9, 11, 9, 10, 36, 39, 44, 20])

# create a list of the gaps between the consecutive values
gaps = [y - x for x, y in zip(data[:-1], data[1:])]
# have python calculate the standard deviation for the gaps
sd = stdev(gaps)

# create a list of lists, put the first value of the source data in the first
lists = [[data[0]]]
for x in data[1:]:
# if the gap from the current item to the previous is more than 1 SD
# Note: the previous item is the last item in the last list
# Note: the '> 1' is the part you'd modify to make it stricter or more relaxed
if (x - lists[-1][-1]) / sd > 1:
# then start a new list
lists.append([])
# add the current item to the last list in the list
lists[-1].append(x)

print(lists)

输出是:

[[1.1, 1.8, 1.9], [9, 10, 11], [20], [36, 39, 44]]

我假设排序顺序并不重要。

在评论中回答我自己的问题,如果将 15 和 25 相加,结果是:

[[1.1, 1.8, 1.9], [9, 10, 11], [15], [20], [25], [36, 39], [44]]

请注意,在将 15 和 25 相加后,标准偏差发生了变化,因此 44 也被拆分成自己的小组。如果再加上 17,它会变成:

[[1.1, 1.8, 1.9], [9, 10, 11], [15, 17, 20], [25], [36, 39], [44]]

或者,如果不加17,而是要求距离不超过1.6 SD:

[[1.1, 1.8, 1.9], [9, 10, 11, 15, 20, 25], [36, 39, 44]] 

关于python - 将相似范围的数字组合在一起的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55446744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com