您可以使用集群对这些进行分组。诀窍是要了解您的数据有两个维度:您可以看到的维度,以及看起来像 [1, 2, 3... 22] 的“空间”维度。您可以像这样在numpy中创建此矩阵:
import numpy as np
y = [1,1,5,6,1,5,10,22,23,23,50,51,51,52,100,112,130,500,512,600,12000,12230]
x = range(len(y))
m = np.matrix([x, y]).transpose()
然后您可以对矩阵执行聚类,其中:
from scipy.cluster.vq import kmeans
kclust = kmeans(m, 5)
kclust 的输出将如下所示:
(array([[ 11, 51],
[ 15, 114],
[ 20, 12115],
[ 4, 9],
[ 18, 537]]), 21.545126372346271)
对你来说,最有趣的部分是矩阵的第一列,它表示沿 x 维的中心是什么:
kclust[0][:, 0]
# [20 18 15 4 11]
然后,您可以根据它们最接近的五个中心中的哪一个将您的点分配给一个集群:
assigned_clusters = [abs(cluster_indices - e).argmin() for e in x]
# [3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 0, 0, 0]