scipy.spatial.transform.Rotation.align_vectors¶
- Rotation.align_vectors()¶
估计旋转以最佳地对齐两组矢量。
查找帧A和帧B之间最能对齐一组向量的旋转 a 和 b 在这些画面中观察到的。下面的损失函数被最小化以求解旋转矩阵 \(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_rotation :
Rotation
实例循环实例 变换的旋转的最佳估计 b 至 a 。
- rmsd浮动
对齐后给定矢量集之间的均方根距离(加权)。它等于
sqrt(2 * minimum_loss)
,在哪里minimum_loss
是为找到的最佳旋转评估的损失函数。- sensitivity_matrixndarray,形状(3,3)
估计旋转估计的灵敏度矩阵,如附注所述。仅在以下情况下返回 return_sensitivity 是真的。
- estimated_rotation :
注意事项
该方法还可以计算估计的旋转对矢量测量的微小扰动的灵敏度。具体地说,我们将旋转估计误差视为帧A的一个较小的旋转向量,假设向量在A中,灵敏度矩阵与该旋转向量的协方差成正比。 a 测量的误差比它们的长度小得多。要得到真实的协方差矩阵,必须将返回的灵敏度矩阵乘以调和均值 [3] 每一次观测中的方差。请注意, weights 应该与观测方差成反比才能得到一致的结果。例如,如果所有矢量都以0.01的相同精度进行测量 (weights 必须全部相等),则应将灵敏度矩阵乘以0.01**2以获得协方差。
请参阅 [2] 关于协方差估计的更严格的讨论。
参考文献