資源簡介
利用KMeans算法對點云數據進行分類,例如可以提取出點云數據里的房屋、道路等。
代碼片段和文件信息
#Author?ZTY
import?numpy?as?np
def?kmean(xkmaxtimes):
????mn?=?np.shape(x)
????#?0矩陣的格式np.zeros([mn])
????dataset?=?np.zeros([mn+1])
????dataset[::-1]?=?x
????#middle?=?dataset[np.random.randint(msize=k):]
????middle?=?dataset[0:3:]
????middle[:-1]?=?range(1k+1)
????times?=?0
????oldmiddle?=?None
????while?not?shouldstop(oldmiddlemiddletimesmaxtimes):
????????print(‘times:‘times)
????????print(‘dataset:‘dataset)
????????print(‘middle:‘middle)
????????oldmiddle?=?np.copy(middle)
????????times?=?times?+?1
????????update(datasetmiddle)
????????middle?=?getmiddles(datasetk)
????return?dataset
def?shouldstop(oldmiddlemiddletimesmaxtimes):
????if?times?>?maxtimes:
????????return?True
????return?np.array_equal(oldmiddlemiddle)
def?update(datasetmiddle):
????mn?=dataset.shape
????for?i?in?range(0m):
????????dataset[i-1]?=?getLabelFromCloestCentroid(dataset[i:-1]middle)
def?getLabelFromCloestCentroid(datasetRowmiddle):
????label?=?middle[0-1]
????minDist?=?np.linalg.norm(datasetRow?-?middle[0:-1])
????#np.linalg.norm(a-b)用來計算ab兩點之間的距離,a.b如果是list,必須要np.array(a)進行格式轉換
????for?i?in?range(1middle.shape[0]):
????????dist?=?np.linalg.norm(datasetRow?-?middle[i:-1])
????????if?dist?????????????minDist?=?dist
????????????label?=?middle[i-1]
????print(‘minDist‘minDist)
????print(‘label‘label)
????return?label
def?getmiddles(datatsetk):
????result?=?np.zeros((kdatatset.shape[1]))
????for?i?in?range(1k+1):
?????
- 上一篇:超限學習機—邏輯回歸Python代碼
- 下一篇:Python簡易滾動抽獎界面程序
評論
共有 條評論