0
我正在嘗試爲小型項目實現k均值聚類算法。我來到this article這表明,使用numpy數組函數更新元素
K均值的速度要快得多,如果你寫上使用numpy的陣列操作的更新功能,而不用手動循環數組過來,更新自己的值。
我正在使用數組的每個元素迭代來更新它。對於數據集z
中的每個元素,我將通過遍歷每個元素從最近的質心分配簇數組。
for i in range(z):
clstr[i] = closest_center(data[i], cen)
和我的更新功能是
def closest_center(x, clist):
dlist = [fabs(x - i) for i in clist]
return clist[dlist.index(min(dlist))]
由於我使用的灰度圖像,我使用絕對值來計算的歐氏距離。
我注意到opencv
也有這個算法。執行算法的時間不到2秒,而我的時間超過70秒。我可以知道文章的建議嗎?
我的圖像作爲灰度級導入,表示爲2d numpy數組。我進一步轉換爲1d數組,因爲它更容易處理1d數組。
爲什麼你想要自己實現這個? 'scipy'已經爲你提供了k-means聚類算法。 –
@AkshatMahajan作爲一個圖像處理的小項目。我已經可以通過OpenCV訪問它。不過我必須不使用內置功能。 –
你應該分享更多的代碼,以便有更好的主意。你也不應該使用歐幾里德距離嗎? – Romain