kd树和寻找k近邻算法具体流程就不赘述了,这个链接写的很好懂 https://zhuanlan.zhihu.com/p/23966698
按照链接里的算法写了k近邻的python实现
from math import sqrt
class KDnode:
def __init__(self, data, left, right, split):
self.left = left
self.right = right
self.split = split
self.data = data
class KDtree:
def __init__(self,data):
self.k = len(data[0])
def CreatKD(split, data_set):
if not data_set:
return None
data_set.sort(key=lambda x: x[split])
flag = len(data_set)//2
new_split = (split+1) % self.k
return KDnode(data_set[flag], CreatKD(new_split,data_set[:flag]), CreatKD(new_split, data_set[flag+1:]), split)
self.root = CreatKD(0, data)
def nearest(tree, point, k):
L = []
def dis(x,p): #x是当前节点,p是目标节点
if l