当前位置: 首页 > news >正文

AF3 quat_multiply 和 quat_multiply_by_vec 函数解读

AlphaFold3  rigid_utils 模块的 quat_multiply 和 quat_multiply_by_vec 函数实现了四元数的乘法以及四元数与纯向量四元数的乘法。它使用了一个预定义的四元数乘法表 _QUAT_MULTIPLY 来简化计算。

源代码:

_QUAT_MULTIPLY = np.zeros((4, 4, 4))
_QUAT_MULTIPLY[:, :, 0] = [[ 1, 0, 0, 0],
                          [ 0,-1, 0, 0],
                          [ 0, 0,-1, 0],
                          [ 0, 0, 0,-1]]

_QUAT_MULTIPLY[:, :, 1] = [[ 0, 1, 0, 0],
                          [ 1, 0, 0, 0],
                          [ 0, 0, 0, 1],
                          [ 0, 0,-1, 0]]

_QUAT_MULTIPLY[:, :, 2] = [[ 0, 0, 1, 0],
                          [ 0, 0, 0,-1],
                          [ 1, 0, 0, 0],
                          [ 0, 1, 0, 0]]

_QUAT_MULTIPLY[:, :, 3] = [[ 0, 0, 0, 1],
                          [ 0, 0, 1, 0],
                          [ 0,-1, 0, 0],
                          [ 1, 0, 0, 0]]

_QUAT_MULTIPLY_BY_VEC = _QUAT_MULTIPLY[:, 1:, :]

_CACHED_QUATS = {
    "_QTR_MAT": _QTR_MAT,
    "_QUAT_MULTIPLY": _QUAT_MULTIPLY,
    "_QUAT_MULTIPLY_BY_VEC": _QUAT_MULTIPLY_BY_VEC
}

@lru_cache(maxsize=None)
def _get_quat(quat_key, dtype, device):
    return torch.tensor(_CACHED_QUATS[quat_key], dtype=dtype, device=device)


def quat_multiply(quat1, quat2):
    """Multiply a quaternion by another quaternion."""
    mat = _get_quat("_QUAT_MULTIPLY", dtype=quat1.dtype, device=quat1.device)
    reshaped_mat = mat.view((1,) * len(quat1.shape[:-1]) + mat.shape)
    return torch.sum(
        reshaped_mat *
        quat1[..., :, None, None] *
        quat2[..., None, :, None],
        dim=(-3, -2)
      )


def quat_multiply_by_vec(quat, vec):
    """Multiply a quaternion by a pure-vector quaternion."

相关文章:

  • PostgreSQL用SQL实现俄罗斯方块
  • EasyRTC轻量级Webrtc音视频通话SDK,助力带屏IPC在嵌入式设备中的应用
  • 密码协议与网络安全——引言
  • UE5.5 Niagara 渲染器
  • 从 0 到 1 构建 Python 分布式爬虫,实现搜索引擎全攻略
  • 简述Mybatis的插件运行原理,以及如何编写一个插件?
  • 【Ratis】Ratis Streaming概览
  • win11找不到hosts文件该如何处理
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.21)
  • 以欧洲极端降水归因分析为例讲解CESM模型在降水诊断计算中的科研应用
  • 性能优化中如何“避免链接关键请求”
  • Upwork合同类型:固定价格 vs 按小时收费
  • AI Agent中的MCP详解
  • 回溯法经典练习:组合总和的深度解析与实战
  • 夸克网盘任务脚本——进阶自动版
  • Axure项目实战:智慧城市APP(一)(动态面板、拖动效果)
  • tcping 命令的使用,ping IP 和端口
  • LDAP从入门到实战:环境部署与配置指南(下)
  • LangManus:新一代开源智能体框架如何让AI开发更简单?
  • 根据文件名称查询文件所在位置
  • 外交部发言人就澳大利亚联邦大选结果答记者问
  • 云南省政协原党组成员、秘书长车志敏接受审查调查
  • 赵厚均评《唐诗与唐代园林景观的审美建构研究》|林泉恣探历,风景暂徘徊
  • 近七成科创板公司2024年营收增长,285家营收创历史新高
  • 证监会:坚决拥护党中央对王建军进行纪律审查和监察调查的决定
  • 医学统计专家童新元逝世,终年61岁