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

# as_mrp

Rotation.as_mrp()

  Represent as Modified Rodrigues Parameters (MRPs).

  MRPs are a 3 dimensional vector co-directional to the axis of rotation and whose magnitude is equal to `tan(theta / 4)`, where `theta` is the angle of rotation (in radians) [1].

  MRPs have a singularity at 360 degrees which can be avoided by ensuring the angle of rotation does not exceed 180 degrees, i.e. switching the direction of the rotation when it is past 180 degrees. This function will always return MRPs corresponding to a rotation of less than or equal to 180 degrees.

  Returns:
    mrps ndarray, shape (…, 3)

      Shape depends on shape of inputs used for initialization.

  Notes

  Added in version 1.6.0.

  Array API Standard Support

  `as_mrp` has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

  Library | CPU | GPU
  --- | --- | ---
  NumPy | ✅ | n/a
  CuPy | n/a | ✅
  PyTorch | ✅ | ✅
  JAX | ✅ | ✅
  Dask | ⛔ | n/a

  > See Support for the array API standard for more information.

  References

  [1]

  Shuster, M. D. “A Survey of Attitude Representations”, The Journal of Astronautical Sciences, Vol. 41, No.4, 1993, pp. 475-476

  Examples

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

  Represent a single rotation:

      >>> r = R.from_rotvec([0, 0, np.pi])
      >>> r.as_mrp()
      array([0.        , 0.        , 1.         ])
      >>> r.as_mrp().shape
      (3,)

  Represent a stack with a single rotation:

      >>> r = R.from_euler('xyz', [[180, 0, 0]], degrees=True)
      >>> r.as_mrp()
      array([[1.       , 0.        , 0.         ]])
      >>> r.as_mrp().shape
      (1, 3)

  Represent multiple rotations:

      >>> r = R.from_rotvec([[np.pi/2, 0, 0], [0, 0, np.pi/2]])
      >>> r.as_mrp()
      array([[0.41421356, 0.        , 0.        ],
             [0.        , 0.        , 0.41421356]])
      >>> r.as_mrp().shape
      (2, 3)