Skip to main content
`Ctrl`+`K`

# numpy.searchsorted

numpy.searchsorted(a, v, side='left', sorter=None)

  Find indices where elements should be inserted to maintain order.

  Find the indices into a sorted array a such that, if the corresponding elements in v were inserted before the indices, the order of a would be preserved.

  Assuming that a is sorted:

  side | returned index i satisfies
  --- | ---
  left | `a[i-1] < v <= a[i]`
  right | `a[i-1] <= v < a[i]`

  Parameters:
    a 1-D array_like

      Input array. If sorter is None, then it must be sorted in ascending order, otherwise sorter must be an array of indices that sort it.

    v array_like

      Values to insert into a.

    side{‘left’, ‘right’}, optional

      If ‘left’, the index of the first suitable location found is given. If ‘right’, return the last such index. If there is no suitable index, return either 0 or N (where N is the length of a).

    sorter 1-D array_like, optional

      Optional array of integer indices that sort array a into ascending order. They are typically the result of argsort.

  Returns:
    indices int or array of ints

      Array of insertion points with the same shape as v, or an integer if v is a scalar.

  See also

  `sort`

    Return a sorted copy of an array.

  `histogram`

    Produce histogram from 1-D data.

  Notes

  Binary search is used to find the required insertion points.

  As of NumPy 1.4.0 `searchsorted` works with real/complex arrays containing `nan` values. The enhanced sort order is documented in `sort`.

  This function uses the same algorithm as the builtin python `bisect.bisect_left` (`side='left'`) and `bisect.bisect_right` (`side='right'`) functions, which is also vectorized in the v argument.

  Examples

      >>> import numpy as np
      >>> np.searchsorted([11,12,13,14,15], 13)
      2
      >>> np.searchsorted([11,12,13,14,15], 13, side='right')
      3
      >>> np.searchsorted([11,12,13,14,15], [-10, 20, 12, 13])
      array([0, 5, 1, 2])

  When sorter is used, the returned indices refer to the sorted array of a and not a itself:

      >>> a = np.array([40, 10, 20, 30])
      >>> sorter = np.argsort(a)
      >>> sorter
      array([1, 2, 3, 0])  # Indices that would sort the array 'a'
      >>> result = np.searchsorted(a, 25, sorter=sorter)
      >>> result
      2
      >>> a[sorter[result]]
      30  # The element at index 2 of the sorted array is 30.