python - 在二维中找到最近点的有效方法

时间:2014-11-04 07:58:17

标签: python

我有100个站点和A(x,y)点 我需要找到离A最近的站点。我找到了解决方案here,但它会抛出错误。

这是我做的:

def closest_node(node, listStation):
   nodes = []
   for i in xrange(1,len(listStation)):
       nodes.append((listStation[i][12],listStation[i][13]))
   nodes = np.asarray(nodes)
   dist_2 = np.sum((nodes - node)**2, axis=1)
   return np.argmin(dist_2)

print closest_node(((99,100)), listStation)

这是错误:

dist_2 = np.sum((nodes - node)**2, axis=1)
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'tuple'

感谢@WeaselFox,不同之处在于我从CSV文件中获取了数据。这是解决方案:

def closest_node(node, listStation):
  nodes = []
  for i in xrange(1,len(listStation)):
      a = np.asanyarray((float(listStation[i][12]),float(listStation[i][13])))
      nodes.append(a)        

  nodes = np.asarray(nodes)    
  dist_2 = np.sum((nodes - node)**2, axis=1)
  return np.argmin(dist_2)

1 个答案:

答案 0 :(得分:1)

您需要将节点转换为np数组,以便numpy计算距离:

node = np.asarray(node)

示例:

>>> a = np.asarray((1,2))
>>> b = np.asarray((2,3))
>>> c = np.asarray((1,1))
>>> nodes = [b,c]
>>> dist_2 = np.sum((a - nodes)**2, axis=1)
>>> nodes[np.argmin(dist_2)]
array([1, 1])