|  | 
 
| 
首先对zip()后的结果进行计算
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  from math import sqrt
 p = [1,2]
 t = [2, 3]
 a = sqrt(sum(p1-p2)**2 for p1, p2 in zip(p, t))
 结果报错:
 Traceback (most recent call last):
 File "<input>", line 1, in <module>
 TypeError: must be real number, not generator
 但是我能够打印出结果:
 for x, y in zip(p, t):
 print(x)
 print(y)
 结果:
 1
 2
 2
 3
 
 还有就是kd树以及搜索最近邻点
 from math import sqrt
 from collections import namedtuple
 
 class KdNode(object):
 def __init__(self, dom_elt, split, left, right):
 self.dom_elt = dom_elt
 self.split = split
 self.left = left
 self.right = right
 
 class KdTree(object):
 def __init__(self, data):
 k = len(data[0])
 
 def CreateNode(split, data_set):
 if not data_set:
 return None
 data_set.sort(key = lambda x:x[split])
 split_pos = len(data_set) // 2
 median = data_set[split_pos]
 split_next = (split + 1) % k
 
 return KdNode(median, split,\
 CreateNode(split_next, data_set[:split_pos]),\
 CreateNode(split_next, data_set[split_pos + 1 :]))
 
 self.root = CreateNode(0, data)
 
 def preorder(root):
 print(root.dom_elt)
 if root.left:
 preorder(root.left)
 if root.right:
 preorder(root.right)
 
 result = namedtuple('Result_tuple', 'nearest_point nearest_dist nearest_visited')
 def find_nearest(tree, point):
 k = len(point)
 
 def trave(kd_node, target, max_dist):
 if kd_node is None:
 return result([0]*k, float('inf'), 0)
 
 node_visited = 1
 
 s = kd_node.split
 pivot = kd_node.dom_elt
 
 if target[s] <= pivot[s]:
 nearest_node = kd_node.left
 further_node = kd_node.right
 else:
 nearest_node = kd_node.right
 further_node = kd_node.left
 
 temp1 = trave(nearest_node, target, max_dist)
 
 nearest = temp1.nearest_point
 dist = temp1.nearest_dist
 
 node_visited += temp1.nearest_visited
 
 if dist < max_dist:
 max_dist = dist
 
 temp_dist = abs(pivot[s] - target[s])
 if max_dist < temp_dist:
 return result(nearest, dist, node_visited)
 
 temp_dist = sqrt(sum(p1-p2)**2 for p1, p2 in list(zip(pivot, target)))
 
 if temp_dist < dist:
 nearest = pivot
 dist = temp_dist
 max_dist = dist
 
 temp2 = trave(further_node, target, max_dist)
 node_visited +=temp2.nearest_visited
 if temp2.nearest_dist < dist:
 nearest = temp2.nearest_point
 dist = temp2.nearest_dist
 
 return result(nearest, dist, node_visited)
 
 return trave(tree.root, point, float('inf'))
 
 
 data = [[2,3], [5,4], [9,6], [4,7], [8,1], [7,2]]
 kd = KdTree(data)
 find_nearest(kd, [3,4.5])
 
 find_nearest()那一块里总有一些不对。。。又说不上来
 
 | 
 |