Python 计算k均值并绘制散点图

Python 计算k均值并绘制散点图,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,我想在散点图中绘制3个“k表示”点 from pylab import plot,show from numpy import array from scipy.cluster.vq import kmeans,vq data = array([1,1,1,1,1,1,3,3,3,3,3,3,7,7,7,7,7,7]) plot(data,marker='*',linewidth=0) centroids,x = kmeans(data,3) idx,x = vq(data,centroid

我想在散点图中绘制3个“k表示”点

from pylab import plot,show
from numpy import array
from scipy.cluster.vq import kmeans,vq

data = array([1,1,1,1,1,1,3,3,3,3,3,3,7,7,7,7,7,7])
plot(data,marker='*',linewidth=0)

centroids,x = kmeans(data,3)
idx,x = vq(data,centroids)

plot(data[idx==0,0],data[idx==0,1],'yellow',
     data[idx==1,0],data[idx==1,1],'yellow',
     data[idx==2,0],data[idx==2,1],'yellow') 

plot(centroids[:,0],centroids[:,1],'red',markersize=8)
show()
由于产生以下错误,上述代码出现了什么问题:

plot(data[idx==0,0],data[idx==0,1],'yellow',
IndexError: too many indices for array

您的语法
数据[idx==0,0]
不正确

>>> data[idx==0,0]
Traceback (most recent call last):
  ...
IndexError: too many indices for array
稍后,
centroids[:,0]
也会导致
索引器:索引过多
错误,因为
centroids
是一维数组

问题在于数据是一维的,要绘制散点图,需要2个坐标的值。以下步骤可以:

>>> data = data.reshape(9,2) # 2d array of x,y coordinates
>>> data
array([[1, 1],
       [1, 1],
       [1, 1],
       [3, 3],
       [3, 3],
       [3, 3],
       [7, 7],
       [7, 7],
       [7, 7]])
>>> centroids, x = kmeans(data,3) # clusters in 2d
>>> idx, x = vq(data,centroids)
0
x-联吡啶

>>> data[idx==0][:,0]
array([1, 1, 1])
0
y坐标

>>> data[idx==0][:,1]
array([1, 1, 1])

data[idx==0,0]
您想用它实现什么?这不是一个python validesyntax@Oz123-
data[idx==0,0]
是非常有效的python语法,也是numpy中非常常见的习惯用法(尽管它在其他地方也被使用)。@JoeKington,我敢说:你能展示一个工作示例吗?我想学点新东西!