scipy.spatial.transform.Rotation.
__mul__#
- Rotation.__mul__(other)[source]#
与另一个旋转进行组合。
如果 p 和 q 是两个旋转,那么 ‘q 接着 p’ 的组合等价于 p * q。就旋转矩阵而言,组合可以表示为
p.as_matrix() @ q.as_matrix()。- 参数:
- other
Rotation实例 要与此旋转组合的旋转对象。请注意,旋转组合不具有交换律,因此
p * q通常与q * p不同。
- other
- 返回:
附注
数组 API 标准支持
__mul__对 Python Array API Standard 兼容的后端具有实验性支持,除了 NumPy 之外。请考虑通过设置环境变量SCIPY_ARRAY_API=1并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
✅
JAX
✅
✅
Dask
⛔
不适用
有关更多信息,请参阅 对数组 API 标准的支持。
示例
>>> from scipy.spatial.transform import Rotation as R >>> import numpy as np
组合两个单个旋转
>>> p = R.from_quat([0, 0, 1, 1]) >>> q = R.from_quat([1, 0, 0, 1]) >>> p.as_matrix() array([[ 0., -1., 0.], [ 1., 0., 0.], [ 0., 0., 1.]]) >>> q.as_matrix() array([[ 1., 0., 0.], [ 0., 0., -1.], [ 0., 1., 0.]]) >>> r = p * q >>> r.as_matrix() array([[0., 0., 1.], [1., 0., 0.], [0., 1., 0.]])
组合包含相同数量旋转的两个对象
>>> p = R.from_quat([[0, 0, 1, 1], [1, 0, 0, 1]]) >>> q = R.from_rotvec([[np.pi/4, 0, 0], [-np.pi/4, 0, np.pi/4]]) >>> p.as_quat() array([[0. , 0. , 0.70710678, 0.70710678], [0.70710678, 0. , 0. , 0.70710678]]) >>> q.as_quat() array([[ 0.38268343, 0. , 0. , 0.92387953], [-0.37282173, 0. , 0.37282173, 0.84971049]]) >>> r = p * q >>> r.as_quat() array([[ 0.27059805, 0.27059805, 0.65328148, 0.65328148], [ 0.33721128, -0.26362477, 0.26362477, 0.86446082]])
适用广播规则: >>> p = R.from_quat(np.tile(np.array([0, 0, 1, 1]), (5, 1, 1))) >>> q = R.from_quat(np.tile(np.array([1, 0, 0, 1]), (1, 6, 1))) >>> p.shape, q.shape ((5, 1), (1, 6)) >>> r = p * q >>> r.shape (5, 6)