#### Next topic

scipy.spatial.KDTree.query_ball_point

# scipy.spatial.KDTree.query

`KDTree.``query`(x, k=1, eps=0, p=2, distance_upper_bound=inf)

  Query the kd-tree for nearest neighbors

  Parameters:

  x : array_like, last dimension self.m

  > An array of points to query.

  k : int, optional

  > The number of nearest neighbors to return.

  eps : nonnegative float, optional

  > Return approximate nearest neighbors; the kth returned value is guaranteed to be no further than (1+eps) times the distance to the real kth nearest neighbor.

  p : float, 1<=p<=infinity, optional

  > Which Minkowski p-norm to use. 1 is the sum-of-absolute-values “Manhattan” distance 2 is the usual Euclidean distance infinity is the maximum-coordinate-difference distance

  distance_upper_bound : nonnegative float, optional

  > Return only neighbors within this distance. This is used to prune tree searches, so if you are doing a series of nearest-neighbor queries, it may help to supply the distance to the nearest neighbor of the most recent point.

  Returns:

  d : float or array of floats

  > The distances to the nearest neighbors. If x has shape tuple+(self.m,), then d has shape tuple if k is one, or tuple+(k,) if k is larger than one. Missing neighbors (e.g. when k > n or distance_upper_bound is given) are indicated with infinite distances. If k is None, then d is an object array of shape tuple, containing lists of distances. In either case the hits are sorted by distance (nearest first).

  i : integer or array of integers

  > The locations of the neighbors in self.data. i is the same shape as d.

  Examples

      >>> from scipy import spatial
      >>> x, y = np.mgrid[0:5, 2:8]
      >>> tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
      >>> tree.data
      array([[0, 2],
             [0, 3],
             [0, 4],
             [0, 5],
             [0, 6],
             [0, 7],
             [1, 2],
             [1, 3],
             [1, 4],
             [1, 5],
             [1, 6],
             [1, 7],
             [2, 2],
             [2, 3],
             [2, 4],
             [2, 5],
             [2, 6],
             [2, 7],
             [3, 2],
             [3, 3],
             [3, 4],
             [3, 5],
             [3, 6],
             [3, 7],
             [4, 2],
             [4, 3],
             [4, 4],
             [4, 5],
             [4, 6],
             [4, 7]])
      >>> pts = np.array([[0, 0], [2.1, 2.9]])
      >>> tree.query(pts)
      (array([ 2.        ,  0.14142136]), array([ 0, 13]))
      >>> tree.query(pts[0])
      (2.0, 0)