Python中数组模式识别:如何分离聚类为~1和~9的元素
解决方案:分离数组中围绕1和9的聚类
没问题!既然你已经明确观察到数据聚类在**1**和**9**这两个区间附近,完全不需要用复杂的无监督聚类算法(比如K-Means),用简单的筛选逻辑就能高效搞定。
方法一:固定阈值筛选
因为你的两组数据间隔非常明显(1附近的最大值是1.2,9附近的最小值是8.9),直接用两者的中间值作为分界阈值就行:
# 原始数组 A = [1.0, 1.1, 9.0, 9.2, 0.9, 9.1, 1.0, 1.0, 1.2, 9.2, 8.9, 1.1] # 取1和9的中间值作为分界阈值 threshold = 5.0 a_1 = [num for num in A if num < threshold] # 筛选~1附近的元素 a_2 = [num for num in A if num >= threshold] # 筛选~9附近的元素 print("a_1 (elements around ~1):", a_1) print("a_2 (elements around ~9):", a_2)
运行后会得到你想要的结果:
a_1 (elements around ~1): [1.0, 1.1, 0.9, 1.0, 1.0, 1.2, 1.1]
a_2 (elements around ~9): [9.0, 9.2, 9.1, 9.2, 8.9]
方法二:基于距离的分类(更鲁棒)
如果后续数据可能出现靠近中间的情况,或者你想更精准地基于“距离聚类中心更近”来分类,可以计算每个元素到两个中心的绝对距离,归到更近的组:
# 原始数组 A = [1.0, 1.1, 9.0, 9.2, 0.9, 9.1, 1.0, 1.0, 1.2, 9.2, 8.9, 1.1] # 定义两个聚类的中心值 center_1 = 1.0 center_9 = 9.0 a_1 = [] a_2 = [] for num in A: # 计算到两个中心的绝对距离 dist_to_1 = abs(num - center_1) dist_to_9 = abs(num - center_9) # 归到距离更近的组 if dist_to_1 < dist_to_9: a_1.append(num) else: a_2.append(num) print("a_1:", a_1) print("a_2:", a_2)
这个方法的适应性更强,哪怕未来数据出现比如5左右的异常值,也能正确判断它属于哪一组(当然如果是完全无关的异常值,可能需要额外处理,但你的场景里暂时不需要)。
两种方法都能完美满足你的需求,选哪种取决于你后续数据的稳定性~
内容的提问来源于stack exchange,提问作者urgeo
相关产品推荐
相关产品推荐

