Python 最近点等于树上的所有不同位置,为什么?
在返回特定点的最近点后,下次当我将最近点返回到另一点时,将返回与之前相同的最近点。为什么呢Python 最近点等于树上的所有不同位置,为什么?,python,Python,在返回特定点的最近点后,下次当我将最近点返回到另一点时,将返回与之前相同的最近点。为什么呢 class kdnode: def __init__(self,point,left,right): self.point = point self.left = left self.right = right class kdTree: def __init__(self,points,threshold): self.t
class kdnode:
def __init__(self,point,left,right):
self.point = point
self.left = left
self.right = right
class kdTree:
def __init__(self,points,threshold):
self.threshold = threshold
self.root = self.make_kdtree(points)
self.froot = None
self.isFirst = True
def make_kdtree(self,points,depth = 0):
if(len(points) <= self.threshold):
return kdnode(points,None,None)
dimension = 2
axis = depth % dimension
sp = sorted(points,key = lambda point:point[axis])
mid = len(points)//2
return kdnode(sp[mid],self.make_kdtree(sp[:mid],depth+1),self.make_kdtree(sp[mid+1:],depth+1))
def find_closest(self,point,depth=0):
if self.isFirst:
self.froot = self.root.point
self.isFirst = False
if(self.root.left) is None and self.root.right is None:
return self.root.point
axis = depth%2
if point[axis] > self.root.point[axis]:
self.root = self.root.right
else:
self.root = self.root.left
return self.find_closest(point,depth+1)
类节点:
定义初始(自身、点、左、右):
self.point=点
self.left=左
self.right=right
类kdTree:
定义初始值(自身、点、阈值):
self.threshold=阈值
self.root=self.makekdu树(点)
self.froot=无
self.isFirst=True
def make_kdtree(自身、点、深度=0):
if(len(points)self.root.point[轴]:
self.root=self.root.right
其他:
self.root=self.root.left
返回自我。找到最近的(点,深度+1)
这就是为什么:
def find_closest(self,point,depth=0):
if self.isFirst:
self.froot = self.root.point
self.isFirst = False
调用find\u-nestest()
时,它会自动更改。这绝对不是您想要的。find\u-nestest()
应该是一个只读操作,不会破坏数据结构。这就是为什么:
def find_closest(self,point,depth=0):
if self.isFirst:
self.froot = self.root.point
self.isFirst = False
当调用
find\u nestest()
时,它会改变自身。这绝对不是您想要的。find\u nestest()
应该是不会破坏数据结构的只读操作。self
是当前对象。self.isFirst=False
更改当前对象。下次调用find\u closest()
,因为您更改了它。self
是当前对象。self.isFirst=False
更改了当前对象。下次调用find\u closest()
时它将不一样,因为您更改了它。