[英]Using scipy's kmeans2 function in python
我發現這在使用Python kmeans2算法的例子。 我不能得到以下部分
# make some z vlues
z = numpy.sin(xy[:,1]-0.2*xy[:,1])
# whiten them
z = whiten(z)
# let scipy do its magic (k==3 groups)
res, idx = kmeans2(numpy.array(zip(xy[:,0],xy[:,1],z)),3)
這些點是zip(xy[:,0],xy[:,1])
,那么z
在這里做的第三個值是多少?
什么是美白?
任何解釋都表示贊賞。 謝謝。
第一:
# 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)
然后是傳遞給kmeans算法的data
:
res, idx = vq.kmeans2(data, 3)
所以現在你可以看到它在3d空間中被傳遞給算法的30個點,而令人困惑的部分是如何創建點集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.