1 回答

TA貢獻1821條經驗 獲得超6個贊
更新:更正了我的代碼。另請注意,此算法的復雜度為 O(n^2):對于 10240 個點,在快速機器上運行幾乎需要 1 分鐘。
更新 2:返回倒數:count/total_distance
更新 3:如果,正如您上面提到的,密度可視化是一個目標,我認為您提供的示例圖本身就是對觀察者的密度的良好視覺表示。
更新 4:根據下面的評論,我消除了重復計算,現在算法的復雜度為 O(n^2/2),而且運行速度自然是原來的兩倍。
一個邊際改進,尤其是在有多個集群的情況下,是用一種單一顏色的色調來繪制每個集群中的點,這種顏色根據集群的平均密度而變化,比如從淺藍色到深藍色。
正如DerekG指出的那樣,您可以對上述方案使用其他密度度量。
另一個想法是通過計算每個點的鄰居數量來計算每個點的局部密度,如果鄰居的數量超過某個閾值,則通過用對比色(比如黑色)著色來在視覺上突出顯示該點。
請注意,我在此答案中提供的代碼示例可以輕松修改以實現上述任何方法,包括DerekG的方法
我不是聚類分析專家,但我會盡力提供幫助:
原始答案:
答案取決于密度的定義。如果將密度定義為集群中所有點對的平均距離,那么這段代碼就是答案:
from math import sqrt
points = [
[1, 3],
[2, 4],
[9, 1],
[2, 6],
[5, 3],
]
def density(points):
total_distance = 0
count = 0
i = 0
for x1,y1 in points:
for x2,y2 in points[i+1:]:
count += 1
total_distance += sqrt((x1-x2)**2 + (y1-y2)**2)
i += 1
print(count)
return count/total_distance
print(density(points))
哪個打?。?/p>
0.2131384729384717
添加回答
舉報