bundles / scipy latest / scipy / spatial / transform / _rotation / Rotation / as_euler
function
scipy.spatial.transform._rotation:Rotation.as_euler
source: build-install/usr/lib/python3.14/site-packages/scipy/spatial/transform/_rotation.py:1225
Signature
def as_euler(self, seq: str, degrees: bool = False, *, suppress_warnings: bool = False) → ArraySummary
Represent as Euler angles.
Extended Summary
Any orientation can be expressed as a composition of 3 elementary rotations. Once the axis sequence has been chosen, Euler angles define the angle of rotation around each respective axis [1].
The algorithm from [2] has been used to calculate Euler angles for the rotation about a given sequence of axes.
Euler angles suffer from the problem of gimbal lock [3], where the representation loses a degree of freedom and it is not possible to determine the first and third angles uniquely. In this case, a warning is raised (unless the suppress_warnings option is used), and the third angle is set to zero. Note however that the returned angles still represent the correct rotation.
Parameters
seq: str, length 33 characters belonging to the set {'X', 'Y', 'Z'} for intrinsic rotations, or {'x', 'y', 'z'} for extrinsic rotations [1]. Adjacent axes cannot be the same. Extrinsic and intrinsic rotations cannot be mixed in one function call.
degrees: bool, optionalReturned angles are in degrees if this flag is True, else they are in radians. Default is False.
suppress_warnings: bool, optionalDisable warnings about gimbal lock. Default is False.
Returns
angles: ndarray, shape (..., 3)Shape depends on shape of inputs used to initialize object. The returned angles are in the range:
First angle belongs to [-180, 180] degrees (both inclusive)
Third angle belongs to [-180, 180] degrees (both inclusive)
Second angle belongs to:
[-90, 90] degrees if all axes are different (like xyz)
[0, 180] degrees if first and third axes are the same (like zxz)
Examples
from scipy.spatial.transform import Rotation as R import numpy as np✓
r = R.from_rotvec([0, 0, np.pi/2]) r.as_euler('zxy', degrees=True) r.as_euler('zxy', degrees=True).shape✓
(3,)Represent a stack of single rotation:
r = R.from_rotvec([[0, 0, np.pi/2]]) r.as_euler('zxy', degrees=True) r.as_euler('zxy', degrees=True).shape✓
(1, 3)Represent multiple rotations in a single object:
r = R.from_rotvec([ [0, 0, np.pi/2], [0, -np.pi/3, 0], [np.pi/4, 0, 0]]) r.as_euler('zxy', degrees=True) r.as_euler('zxy', degrees=True).shape✓
(3, 3)
Aliases
scipy.spatial.transform.Rotation.as_euler