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

# random

classmethod Rotation.random(cls, num=None, rng=None)

  Generate uniformly distributed rotations.

  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.

  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]])