2013-11-22 82 views
1

我想繪製3「k表示」散點圖中的點。在散點圖上計算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 
+2

'數據[IDX == 0,0]'你有什麼用它來實現?它不是python valide語法 – Oz123

+3

@ Oz123 - 'data [idx == 0,0]'是完全有效的Python語法,它在numpy中是一個非常常見的習慣用法(雖然它在其他地方也是如此)。 –

+0

@JoeKington,我敢說:你能舉個實例嗎?我想學習新的東西! – Oz123

回答

2

你的語法data[idx==0,0]不正確。

>>> data[idx==0,0] 
Traceback (most recent call last): 
    ... 
IndexError: too many indices for array 

稍後,centroids[:,0]也將導致IndexError: too many indices錯誤,因爲centroids是1 d陣列。

問題在於,您的數據是1-d,並繪製了需要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-cooridinates

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

集羣0 y座標

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