Skip to main content
`Ctrl`+`K`
scipy.spatial.transform.Rotation.

# random

static Rotation.random(num=None, rng=None, *, shape=None, random_state=None)

  Generate rotations that are uniformly distributed on a sphere.

  Formally, the rotations follow the Haar-uniform distribution over the SO(3) group.

  Parameters:
    num int or None, optional

      Number of random rotations to generate. If None (default), then a single rotation is generated.

    rng{None, int, `numpy.random.Generator`}, optional

      If rng is passed by keyword, types other than `numpy.random.Generator` are passed to `numpy.random.default_rng` to instantiate a `Generator`. If rng is already a `Generator` instance, then the provided instance is used. Specify rng for repeatable function behavior.

      If this argument is passed by position or random_state is passed by keyword, legacy behavior for the argument random_state applies:

      - If random_state is None (or `numpy.random`), the `numpy.random.RandomState` singleton is used.

      - If random_state is an int, a new `RandomState` instance is used, seeded with random_state.

      - If random_state is already a `Generator` or `RandomState` instance then that instance is used.

      Changed in version 1.15.0: As part of the SPEC-007 transition from use of `numpy.random.RandomState` to `numpy.random.Generator`, this keyword was changed from random_state to rng. For an interim period, both keywords will continue to work, although only one may be specified at a time. After the interim period, function calls using the random_state keyword will emit warnings. The behavior of both random_state and rng are outlined above, but only the rng keyword should be used in new code.

    shape tuple of ints, optional

      Shape of random rotations to generate. If specified, num must be None.

  Returns:
    random_rotation `Rotation` instance

      Contains a single rotation if num is None. Otherwise contains a stack of num rotations.

  See also

  `scipy.stats.special_ortho_group`

  Notes

  This function is optimized for efficiently sampling random rotation matrices in three dimensions. For generating random rotation matrices in higher dimensions, see `scipy.stats.special_ortho_group`.

  Examples

      >>> from scipy.spatial.transform import Rotation as R

  Sample a single rotation:

      >>> R.random().as_euler('zxy', degrees=True)
      array([-110.5976185 ,   55.32758512,   76.3289269 ])  # random

  Sample a stack of rotations:

      >>> R.random(5).as_euler('zxy', degrees=True)
      array([[-110.5976185 ,   55.32758512,   76.3289269 ],  # random
             [ -91.59132005,  -14.3629884 ,  -93.91933182],
             [  25.23835501,   45.02035145, -121.67867086],
             [ -51.51414184,  -15.29022692, -172.46870023],
             [ -81.63376847,  -27.39521579,    2.60408416]])