第一:
# make some z vlues
z = numpy.sin(xy[:,1]-0.2*xy[:,1])
關於這個怪異的事情是,它等同於:
z = numpy.sin(0.8*xy[:, 1])
所以我不知道爲什麼它寫成這樣。也許有一個錯字?
接着,
# whiten them
z = whiten(z)
美白被簡單地歸一化人口的方差。在這裏看到一個演示:
>>> z = np.sin(.8*xy[:, 1]) # the original z
>>> zw = vq.whiten(z) # save it under a different name
>>> zn = z/z.std() # make another 'normalized' array
>>> map(np.std, [z, zw, zn]) # standard deviations of the three arrays
[0.42645, 1.0, 1.0]
>>> np.allclose(zw, zn) # whitened is the same as normalized
True
爲什麼它會變白這不是明顯對我。總之,順動:
# let scipy do its magic (k==3 groups)
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)
讓我們打破分爲兩個部分:
data = np.array(zip(xy[:, 0], xy[:, 1], z))
這是寫
data = np.column_stack([xy, z])
在任何情況下的怪異(慢)的方式,你開始與兩個陣列合併成一個:
>>> xy.shape
(30, 2)
>>> z.shape
(30,)
>>> data.shape
(30, 3)
然後,它傳遞給k均值算法data
:
res, idx = vq.kmeans2(data, 3)
所以,現在你可以看到,它在三維空間中的30分被傳遞到算法和混亂的部分是點的集合如何創建。
這就是我的疑問,當我所要做的就是將k-means應用於2D點時,第三個值「z」的用法是什麼。但是,感謝'白化正常化方差'。我現在得到那部分。也許'z',第三個座標用於將點集劃分成定義良好的聚類,以便在繪製時看到一些有意義的聚類。 – kamalbanga
@kamalbanga,我認爲你鏈接的例子的要點是將kmeans應用於3d點。 – askewchan