# numpy.roll

numpy.roll(a, shift, axis=None)

  Roll array elements along a given axis.

  Elements that roll beyond the last position are re-introduced at the first.

  Parameters:
    a array_like

      Input array.

    shift int or tuple of ints

      The number of places by which elements are shifted. If a tuple, then axis must be a tuple of the same size, and each of the given axes is shifted by the corresponding number. If an int while axis is a tuple of ints, then the same value is used for all given axes.

    axis int or tuple of ints, optional

      Axis or axes along which elements are shifted. By default, the array is flattened before shifting, after which the original shape is restored.

  Returns:
    res ndarray

      Output array, with the same shape as a.

  See also

  `rollaxis`

    Roll the specified axis backwards, until it lies in a given position.

  Notes

  New in version 1.12.0.

  Supports rolling over multiple dimensions simultaneously.

  Examples

      >>> x = np.arange(10)
      >>> np.roll(x, 2)
      array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
      >>> np.roll(x, -2)
      array([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])

      >>> x2 = np.reshape(x, (2, 5))
      >>> x2
      array([[0, 1, 2, 3, 4],
             [5, 6, 7, 8, 9]])
      >>> np.roll(x2, 1)
      array([[9, 0, 1, 2, 3],
             [4, 5, 6, 7, 8]])
      >>> np.roll(x2, -1)
      array([[1, 2, 3, 4, 5],
             [6, 7, 8, 9, 0]])
      >>> np.roll(x2, 1, axis=0)
      array([[5, 6, 7, 8, 9],
             [0, 1, 2, 3, 4]])
      >>> np.roll(x2, -1, axis=0)
      array([[5, 6, 7, 8, 9],
             [0, 1, 2, 3, 4]])
      >>> np.roll(x2, 1, axis=1)
      array([[4, 0, 1, 2, 3],
             [9, 5, 6, 7, 8]])
      >>> np.roll(x2, -1, axis=1)
      array([[1, 2, 3, 4, 0],
             [6, 7, 8, 9, 5]])
      >>> np.roll(x2, (1, 1), axis=(1, 0))
      array([[9, 5, 6, 7, 8],
             [4, 0, 1, 2, 3]])
      >>> np.roll(x2, (2, 1), axis=(1, 0))
      array([[8, 9, 5, 6, 7],
             [3, 4, 0, 1, 2]])