2012-01-18 42 views
2

我要寫一個小應用程序來識別手勢(現在用鼠標)。爲手勢識別重新採樣和規格化numpy陣列

現在,將鼠標座標記錄在Point對象(具有x和y屬性的簡單類)的numpy數組中。 訓練我的系統(基於HMM)我需要(我認爲...)在相同範圍內的相同長度標準化的樣本。

舉例來說,我需要一個8個元素長度的數組用於我的訓練和分類器。 而我剛纔記錄了a1(5-len元素)和a2(9-len元素)。如何實現len(a1)== len(a2)== 8?

編輯:我發現了一個網站,解釋我的問題: http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/ 他用K-手段降低8集羣元素..

SOLUTION:我有一些零散的點(我不噸知道多少),我想把它降低到8的意義。我可以使用的技術之一是使用一些集羣算法將它們集羣化。 KMeans可能是一種可能性。在SciPy的與此代碼:從scipy.cluster.vq進口kmeans2

def clusterize(numpy_array, n_cluster): 
    centroids, labels = kmeans2(numpy_array, n_cluster) 
    #print centroids, labels 
    return centroids 

注意:如果numpy_array尺寸小於n_cluster我注意到,該方案並不好,但在我的現實情況下,一些試驗後,我觀察到我有超過(numpy_array大小> = 60,n_cluster = 8)。這非常合乎邏輯:k-means不是一個確定性的alorightm,但它是一個迭代過程,涉及一些隨機初始化,因爲對於這類問題(如果我理解的很好)沒有任何分析性的良好解決方案。

肯定有一些數學見解,我不想深入研究。這做的工作。

回答

0

我不確定這是你需要的,但是這將從輸入沿着均勻間隔點的輸入線性插入。

input = np.array([0, 1, 2, 3, 4]) ** 2 
n = 8 
m = len(input) 
out = np.interp(np.linspace(0, m-1, n), np.arange(m), input) 
+0

thanks!我用kmeans解決了! – nkint 2012-01-19 08:41:39