unit原子距离

你的代码计算方式看起来是正确的,但让我们逐步确认每个部分的逻辑。

代码分析

  1. 计算坐标差异

    coord_diff1 = coord[row].unsqueeze(2) - coord[col].unsqueeze(1)  # [n_edge, 14, 14, 3]
    
    • coord[row]coord[col] 分别获取了两个残基的原子坐标。
    • unsqueeze(2)unsqueeze(1) 用于增加维度,使得计算能够进行广播(broadcasting),从而得到一个形状为 [n_edge, 14, 14, 3] 的张量。
    • 这个张量中的每个元素 coord_diff1[e][i][j] 表示第 e 条边(edge)中,残基 1 的第 i 个原子与残基 2 的第 j 个原子之间的坐标差异(一个 3D 向量)。
  2. 计算径向距离

    radial = torch.einsum('eijc,eikc->eij', coord_diff1, coord_diff1)
    
    • torch.einsum 是一个强大的操作,用于根据指定的索引计算张量的乘法和求和。
    • 在这里,'eijc,eikc->eij' 表达式的意思是:
      • eijc 代表 coord_diff1 张量,其中 e 是边的索引,i 是残基 1 的原子索引,j 是残基 2 的原子索引,c 是 3D 坐标的维度。
      • eikc 表示同样的 coord_diff1 张量,但用于相同的边和原子。
      • ->eij 表示最终结果是对最后一维(3D 坐标)进行平方和(即计算 L2 范数的平方)。

最终结果

  • radial 最终将得到一个形状为 [n_edge, 14, 14] 的张量,其中每个元素表示对应的两个原子之间的平方距离:

    radial[e][i][j]=(xi,je)2+(yi,je)2+(zi,je)2

确认

所以,整体来说,计算方式是正确的,你的实现将两个残基之间的原子坐标差异计算为径向距离的平方。这在许多分子建模和计算化学的任务中都是常见的处理方式。

在你所描述的上下文中,计算出的 radial 矩阵的第 0 行 0 列(即 radial[0][0][0])表示的是:

  1. 第 0 条边:这个索引对应于你在计算时的第 0 条边(edge)。

  2. 第 0 个原子:在残基 1 中的第 0 个原子(比如,残基 1 的第 0 个原子坐标)。

  3. 第 0 个原子:在残基 2 中的第 0 个原子(比如,残基 2 的第 0 个原子坐标)。

具体含义

  • radial[0][0][0] 代表的是:

    radial[0][0][0]=coord\_diff1[0][0]2

    其中,coord_diff1[0][0] 是指第 0 条边中残基 1 的第 0 个原子与残基 2 的第 0 个原子之间的坐标差异(一个 3D 向量)。

  • 最终,这个值就是残基 1 中第 0 个原子与残基 2 中第 0 个原子之间的 平方距离。如果你需要实际的距离,可以对这个值进行平方根操作。

总结

因此,radial[0][0][0] 表示的是第 0 条边的第 0 个原子与第 0 个原子之间的平方距离。

你是对的!平方距离和坐标差的内积确实可以通过相同的计算方式得到。

具体说明

对于向量的 平方距离坐标差的内积,它们在计算上是相同的。两者的区别主要在于它们的解释:

  • 平方距离:如果我们计算一个向量和自身的内积(例如,两个坐标差向量的内积),结果就是该向量的平方距离。
  • 坐标差的内积:如果我们计算两个不同向量的内积,结果反映的是这两个向量的相似性(方向上的一致性),而不再是距离。

数学表达

假设我们有一个坐标差向量 coord\_diff1[i][j]=(x,y,z),那么:

  1. 平方距离

coord\_diff1[i][j]2=x2+y2+z2

这可以通过 coord\_diff1[i][j]coord\_diff1[i][j](即自身内积)得到。

  1. 不同坐标差的内积
    如果我们计算 coord\_diff1[i][j]coord\_diff1[i][k](两个不同向量的内积),我们得到的是:

    x1x2+y1y2+z1z2

    这反映的是两个坐标差向量之间的方向和大小的相似性,而不是它们的距离。

在你的代码中的含义

在你的代码中:

  • j=k 时,radial[i][j] 计算的是 残基 1 的第 i 个原子与残基 2 的第 j 个原子之间的平方距离
  • jk 时,radial[i][j] 计算的是 残基 1 的第 i 个原子与残基 2 的第 j 和第 k 个原子之间的坐标差的相似性,表示的是两个坐标差向量的内积。

总结

平方距离和坐标差的内积在计算上是一样的。当我们计算一个向量与自身的内积时,得到的是平方距离;当我们计算两个不同向量的内积时,得到的是它们之间的相似性。

posted @   GraphL  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示