unit原子距离
你的代码计算方式看起来是正确的,但让我们逐步确认每个部分的逻辑。
代码分析
-
计算坐标差异:
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]的张量。- 这个张量中的每个元素 $ \text{coord_diff1}[e][i][j] $ 表示第 $ e $ 条边(edge)中,残基 1 的第 $ i $ 个原子与残基 2 的第 $ j $ 个原子之间的坐标差异(一个 3D 向量)。
-
计算径向距离:
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]的张量,其中每个元素表示对应的两个原子之间的平方距离:\[\text{radial}[e][i][j] = (x_{i,j}^{e})^2 + (y_{i,j}^{e})^2 + (z_{i,j}^{e})^2 \]
确认
所以,整体来说,计算方式是正确的,你的实现将两个残基之间的原子坐标差异计算为径向距离的平方。这在许多分子建模和计算化学的任务中都是常见的处理方式。
在你所描述的上下文中,计算出的 radial 矩阵的第 0 行 0 列(即 radial[0][0][0])表示的是:
-
第 0 条边:这个索引对应于你在计算时的第 0 条边(edge)。
-
第 0 个原子:在残基 1 中的第 0 个原子(比如,残基 1 的第 0 个原子坐标)。
-
第 0 个原子:在残基 2 中的第 0 个原子(比如,残基 2 的第 0 个原子坐标)。
具体含义
-
radial[0][0][0]代表的是:\[\text{radial}[0][0][0] = \| \text{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 个原子之间的平方距离。
你是对的!平方距离和坐标差的内积确实可以通过相同的计算方式得到。
具体说明
对于向量的 平方距离 和 坐标差的内积,它们在计算上是相同的。两者的区别主要在于它们的解释:
- 平方距离:如果我们计算一个向量和自身的内积(例如,两个坐标差向量的内积),结果就是该向量的平方距离。
- 坐标差的内积:如果我们计算两个不同向量的内积,结果反映的是这两个向量的相似性(方向上的一致性),而不再是距离。
数学表达
假设我们有一个坐标差向量 \(\text{coord\_diff1}[i][j] = (x, y, z)\),那么:
- 平方距离:
这可以通过 \(\text{coord\_diff1}[i][j] \cdot \text{coord\_diff1}[i][j]\)(即自身内积)得到。
- 不同坐标差的内积:
如果我们计算 \(\text{coord\_diff1}[i][j] \cdot \text{coord\_diff1}[i][k]\)(两个不同向量的内积),我们得到的是:\[x_1 x_2 + y_1 y_2 + z_1 z_2 \]这反映的是两个坐标差向量之间的方向和大小的相似性,而不是它们的距离。
在你的代码中的含义
在你的代码中:
- 当 \(j = k\) 时,
radial[i][j]计算的是 残基 1 的第 \(i\) 个原子与残基 2 的第 \(j\) 个原子之间的平方距离。 - 当 \(j \neq k\) 时,
radial[i][j]计算的是 残基 1 的第 \(i\) 个原子与残基 2 的第 \(j\) 和第 \(k\) 个原子之间的坐标差的相似性,表示的是两个坐标差向量的内积。
总结
平方距离和坐标差的内积在计算上是一样的。当我们计算一个向量与自身的内积时,得到的是平方距离;当我们计算两个不同向量的内积时,得到的是它们之间的相似性。

浙公网安备 33010602011771号