python - 对数字列表进行分组/聚类,以使每个子集的最小-最大间隙始终小于 Python 中的截止值
问题描述
假设我有一个包含 50 个随机数的列表。我想以每个子集的最小-最大差距小于截止值 0.05 的方式对数字进行分组。下面是我的代码。
import random
def cluster(data, cutoff):
data.sort()
res = []
old_x = -10.
for x in data:
if abs(x - old_x) > cutoff:
res.append([x])
else:
res[-1].append(x)
old_x = x
return res
cutoff = 0.05
data = [random.random() for _ in range(50)]
res = cluster(data, cutoff)
检查所有子集的最小-最大间隙是否小于截止值:
print(all([(max(s) - min(s)) < cutoff for s in res]))
输出:
False
显然我的代码不起作用。有什么建议么?
解决方案
您只是检查下一个元素是否按排序顺序(就是这样)在前一个old_x
元素的截止范围内,而不是其集群中的最小元素。因此,例如,您将为输入输出单个集群[20, 20.03, 20.06]
。
通过仅old_x
在启动新集群时更新来解决此问题。
一般调试提示:始终尝试在小型实例上重现您的问题。一个好方法是从失败的测试输入开始,然后反复从中删除元素,直到它通过。现在您知道该元素有一些特别之处。
推荐阅读
- snowflake-cloud-data-platform - 如何用数组转置雪花表
- javascript - Selection: incorrect isCollapsed value for deselecting by clicking on selected text
- c++ - Ray and Plane Intersection in C++ (Plane defined as normal and D)
- python-3.x - An issues with running "pip install Beautifulsoup" on cmd
- machine-learning - Pytorch VNet final softmax activation layer for segmentation. Different channel dimensions to labels. How do I get prediction output?
- python-3.x - How should I implement List annotation, which contains any type of objects?
- cmake - Linking mingw libs with cmake
- android-studio - Android studio create an update function
- r - Is there an R function to estimate cumulative incidence with aggregated survival data?
- powershell - Powershell_ISE 中的 New-IseSnippet 不保存变量?