我試圖構建一個KDtree來尋找 "K最近的鄰居"。 我已經創建了一個名為'Point'的類,它擁有的屬性是:pointID、lat(緯度)和Lon(經度)。 build_index的輸入是一個陣列'point',它包含了所有point的實體。
在下面的代碼中,我試圖構建KDtree,但我在試圖檢索每個點的緯度和經度以進行排序時遇到了問題,但我知道僅僅使用'point'是不行的,因為它是一個只有類實體的陣列。
感謝您的幫助!
class KDTreeNN(NearestNeigh)。
def build_index(self, points: [Point]) 。
depth = 0
n = len(point)
if n <0:
return None: 0.
axis = depth % 2: 2
sorted_points = sorted(point, key = lambda point: point[axis])
深度 1
return {
'point' : sorted_points[int(n/2)] 。
'left' : self.build_index(sorted_points[:int(n/2)] 。)
'right' : self.build_index(sorted_points[int(n/2) 1: ])
uj5u.com熱心網友回復:
point[axis]不能作業,因為point不支持這種括號符號。
有幾種解決辦法:
將Point定義為一個命名的元組:
不需要定義Point。
而不是將Point定義為:
class Point。
def __init__(self, pointID, lat, lon)。
self.pointID = pointID
self.lat = lat
self.lon = lon
...將其定義為一個命名的元組。確保使lon和lat成為它的前兩個成員:
Point = namedtuple("Point", "lat, lon, pointID")
同時確保在創建Point實體時,你把引數放在正確的順序上。
有了這個改變,它就可以作業了。這需要你將Point實體視為不可改變的。
根據一個字串變數訪問屬性(lon或lat):
axis = ("lon", "lat") [depth % 2]
sorted_points = sorted(point, key = lambda point: getattr(point, axis)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/308843.html
標籤:
