AlphaFold3 rigid_utils 模块的 identity_quats 函数
主要是 创建一个批次大小为 batch_dims
的“身份四元数”张量。具体输出是一个形状为 (*batch_dims, 4)
的张量,每个元素都是四元数 (1,0,0,0)。这个特殊的单位四元数 (1,0,0,0)代表 “不旋转”(Identity Rotation)。
在几何意义上:
- 它对应的是零角度旋转,绕任何轴旋转0度,等于啥也没转。
- 它是旋转操作的“单位元素”,就像矩阵里的单位矩阵 I一样,和它复合(四元数乘法)不改变原始旋转。
例如:
对任何四元数 q,都有:
(1,0,0,0) × q = q × (1,0,0,0) = q
所以它是 保持不变的“中性元素”。
函数使用了 functools.lru_cache
装饰器来缓存结果,以提高性能。
源代码:
@lru_cache(maxsize=None)
def identity_quats(batch_dims: Tuple[int], dtype: Optional[torch.dtype] = None,device: Optional[torch.device] = None, requires_grad: bool = True,
) -> torch.Tensor: