Python 用kmeans聚类法求某一质心对应的所有点的索引

Python 用kmeans聚类法求某一质心对应的所有点的索引,python,numpy,scipy,cluster-analysis,k-means,Python,Numpy,Scipy,Cluster Analysis,K Means,下面是kmeans集群的一个简单实现(集群中的点标记为1到500): 我正在试图找到每个簇内所有点的索引。您已经有了该索引 plot(data[idx==0,0],data[idx==0,1],'ob', data[idx==1,0],data[idx==1,1],'or') 猜猜idx做了什么,以及数据[idx==0]与数据[idx==1]相比包含了什么 plot(data[idx==0,0],data[idx==0,1],'ob', data[idx==1,0],dat

下面是kmeans集群的一个简单实现(集群中的点标记为1到500):


我正在试图找到每个簇内所有点的索引。

您已经有了该索引

plot(data[idx==0,0],data[idx==0,1],'ob',
     data[idx==1,0],data[idx==1,1],'or')

猜猜
idx
做了什么,以及
数据[idx==0]
数据[idx==1]
相比包含了什么

plot(data[idx==0,0],data[idx==0,1],'ob',
     data[idx==1,0],data[idx==1,1],'or')
猜猜
idx
做了什么,以及
数据[idx==0]
数据[idx==1]
相比包含了什么。

在这一行:

idx,_ = vq(data,centroids)
您已经为
数据
数组中的每个点(行)生成了一个包含最近质心索引的向量

似乎您需要最接近质心0、质心1等的所有点的行索引。您可以使用来查找索引,其中
idx==i
,其中
i
是您感兴趣的质心

例如:

in_0 = np.nonzero(idx == 0)[0]
in_1 = np.nonzero(idx == 1)[0]

在评论中,您还询问了为什么
idx
向量在不同的运行中不同。这是因为如果将整数作为第二个参数传递给
kmeans
,则质心位置将被随机初始化()。

在此行中:

idx,_ = vq(data,centroids)
您已经为
数据
数组中的每个点(行)生成了一个包含最近质心索引的向量

似乎您需要最接近质心0、质心1等的所有点的行索引。您可以使用来查找索引,其中
idx==i
,其中
i
是您感兴趣的质心

例如:

in_0 = np.nonzero(idx == 0)[0]
in_1 = np.nonzero(idx == 1)[0]


在评论中,您还询问了为什么
idx
向量在不同的运行中不同。这是因为如果将整数作为第二个参数传递给
kmeans
,则质心位置将随机初始化()。

您已经使用
idx,q=vq(数据,质心)
将点分配给簇。
idx
中的每个元素要么是0,对应于
质心[0]
,要么是1,对应于
质心[1]
。这不是您要找的吗?我的问题是如何获得质心[0]和质心[1]中项目的标签。我不明白您所说的“标签”是什么意思。也许您需要集群0、集群1等中所有元素的索引。?在这种情况下,您可以在0=np.where(idx==0)[0]中使用
,在1=np.where(idx==1)[0]
中使用
。谢谢您的回答。并且
其中(idx==1)
每次运行程序时都会给出不同的索引。(我的场景中有两个以上的集群)。这是因为簇[0]每次都不同吗?您已经使用
idx,q=vq(数据,质心)
将点指定给簇。
idx
中的每个元素要么是0,对应于
质心[0]
,要么是1,对应于
质心[1]
。这不是您要找的吗?我的问题是如何获得质心[0]和质心[1]中项目的标签。我不明白您所说的“标签”是什么意思。也许您需要集群0、集群1等中所有元素的索引。?在这种情况下,您可以在0=np.where(idx==0)[0]
中使用
,在1=np.where(idx==1)[0]
中使用
。谢谢您的回答。并且
其中(idx==1)
每次运行程序时都会给出不同的索引。(我的场景中有两个以上的集群)。这是因为簇[0]每次都不同吗?我不是在寻找正在绘制的值(或坐标)。我在寻找一种在簇[1]和簇[0]中获取标签的方法。我不是在寻找正在绘制的值(或坐标)。我正在寻找一种在集群[1]和集群[0]中获取标签的方法