scipy.spatial.transform.Rotation.

mean#

Rotation.mean(weights=None, axis=None)[source]#

计算旋转的平均值。

使用的平均值是弦L2平均值(也称为投影或诱导算术平均值)[1]。如果A是一组旋转矩阵,则平均值M是最小化以下损失函数的旋转矩阵

\[L(M) = \sum_{i = 1}^{n} w_i \lVert \mathbf{A}_i - \mathbf{M} \rVert^2 ,\]

其中\(w_i\)是对应于每个矩阵的权重

参数:
weightsarray_like shape (…, N), 可选

描述旋转相对重要性的权重。如果为None(默认值),则假定weights中的所有值相等。如果给定,weights的形状必须可以广播到旋转形状。权重必须是非负数。

axisNone, int, 或 int 的元组, 可选

计算平均值的轴或轴。默认情况下,计算所有旋转的平均值。

返回:
meanRotation 实例

包含当前实例中旋转平均值的单个旋转。

附注

数组 API 标准支持

mean对 Python Array API 标准兼容的后端具有实验性支持,除了 NumPy 之外。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

Dask

不适用

有关更多信息,请参阅 对数组 API 标准的支持

参考文献

[1]

Hartley, Richard, 等人,“Rotation Averaging”,International Journal of Computer Vision 103, 2013, 页码 267-305。

示例

>>> from scipy.spatial.transform import Rotation as R
>>> r = R.from_euler('zyx', [[0, 0, 0],
...                          [1, 0, 0],
...                          [0, 1, 0],
...                          [0, 0, 1]], degrees=True)
>>> r.mean().as_euler('zyx', degrees=True)
array([0.24945696, 0.25054542, 0.24945696])