You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:07