在Python中将向量值排列到列表

在Python中将向量值排列到列表,python,vector,cluster-analysis,k-means,Python,Vector,Cluster Analysis,K Means,我在我的数据上运行k-means算法,我的标签输出如下所示: [0 5 8 6 1 3 3 2 2 5 5 6 1 1 3 3 1 8 8 3 3 1 1 1 1 5 2 5 1 1 7 3 6 4 3 3 8 1 3 3 5 1 8 8 1 8 7 1 1 8 6] 该向量包含点索引的簇编号,例如,对于点索引0,第一个值是簇编号0,向量的第二个值表示它的簇编号5,点索引1属于它 我希望得到集群的子集: 比如: 例如,向量的第一个值为5,我需要列出这个向量的所有索引,值为5,反之亦然。我希望

我在我的数据上运行k-means算法,我的标签输出如下所示:

[0 5 8 6 1 3 3 2 2 5 5 6 1 1 3 3 1 8 8 3 3 1 1 1 1 5 2 5 1 1 7 3 6 4 3 3 8
 1 3 3 5 1 8 8 1 8 7 1 1 8 6]
该向量包含点索引的簇编号,例如,对于点索引0,第一个值是簇编号0,向量的第二个值表示它的簇编号5,点索引1属于它

我希望得到集群的子集: 比如:

例如,向量的第一个值为5,我需要列出这个向量的所有索引,值为5,反之亦然。我希望每个值都有自己的索引列表

因此,值5的列表应为:

集群5=[1,9,10,25,27


和其他值的所有输出,最终输出应该是8个列表。

如果您愿意使用numpy,这很容易用numpy完成。其中

cluster5, = numpy.where( array == 5 )
在“纯”python中,您可以这样做:

cluster5 = [i for i in range(len(array)) if array[i]==5]

这将通过以下方式实现:

基于和方法的简单解决方案

def cluster(seq):
    out = {}
    for index, value in enumerate(seq):
        try:
            out[value].append(index)
        except KeyError:
            out[value] = [index]
    return out

data = [2, 3, 4, 4, 3, 1]
result = cluster(data)
assert result[2] == [0]
assert result[3] == [1, 4]
assert result[4] == [2, 3]
assert result[1] == [5]
array = [0,5,8,6,1,3,3,2,2,5,5,6,1,1,3,3,1,8,8,3,3,1,1,1,1,5,2,5,1,1,7,3,6,4,3,3,8,1,3,3,5,1,8,8,1,8,7,1,1,8,6]

for j in range(9):
    print("%i: %s"%(j,[i for i,x in enumerate(array) if x == j]))
def cluster(seq):
    out = {}
    for index, value in enumerate(seq):
        try:
            out[value].append(index)
        except KeyError:
            out[value] = [index]
    return out

data = [2, 3, 4, 4, 3, 1]
result = cluster(data)
assert result[2] == [0]
assert result[3] == [1, 4]
assert result[4] == [2, 3]
assert result[1] == [5]