scipy.spatial.transform.Rotation.align_vectors

Rotation.align_vectors()

估计旋转以最佳地对齐两组矢量。

查找帧A和帧B之间最能对齐一组向量的旋转 ab 在这些画面中观察到的。下面的损失函数被最小化以求解旋转矩阵 \(C\)

\[L(C)=\frac{1}{2}\sum_{i=1}^{n}w_i\lVert\mathbf{a}_i- C\mathbf{b}_i\r版本^2,\]

哪里 \(w_i\) 的是 weights 对应于每个矢量。

旋转估计采用Kabch算法。 [1].

参数
a类阵列,形状(N,3)

在初始帧A中观察到的矢量分量。 a 表示矢量。

b类阵列,形状(N,3)

在另一帧B中观察到的矢量分量。 b 表示矢量。

weights类数组形状(N,),可选

描述矢量观测相对重要性的权重。如果为None(默认值),则中的所有值 weights 假设为1。

return_sensitivity布尔值,可选

是否返回灵敏度矩阵。有关详细信息,请参阅注释。默认值为False。

退货
estimated_rotationRotation 实例循环实例

变换的旋转的最佳估计 ba

rmsd浮动

对齐后给定矢量集之间的均方根距离(加权)。它等于 sqrt(2 * minimum_loss) ,在哪里 minimum_loss 是为找到的最佳旋转评估的损失函数。

sensitivity_matrixndarray,形状(3,3)

估计旋转估计的灵敏度矩阵,如附注所述。仅在以下情况下返回 return_sensitivity 是真的。

注意事项

该方法还可以计算估计的旋转对矢量测量的微小扰动的灵敏度。具体地说,我们将旋转估计误差视为帧A的一个较小的旋转向量,假设向量在A中,灵敏度矩阵与该旋转向量的协方差成正比。 a 测量的误差比它们的长度小得多。要得到真实的协方差矩阵,必须将返回的灵敏度矩阵乘以调和均值 [3] 每一次观测中的方差。请注意, weights 应该与观测方差成反比才能得到一致的结果。例如,如果所有矢量都以0.01的相同精度进行测量 (weights 必须全部相等),则应将灵敏度矩阵乘以0.01**2以获得协方差。

请参阅 [2] 关于协方差估计的更严格的讨论。

参考文献

1

https://en.wikipedia.org/wiki/Kabsch_algorithm

2

兰迪斯·马克利,“利用矢量观测确定姿态:一种快速最优矩阵算法”,载“宇航科学杂志”,第41卷,第2期,1993年,第261-280页。

3

https://en.wikipedia.org/wiki/Harmonic_mean