CIF结构中高斯距离扩展的应用
2026/3/17 20:41:43 网站建设 项目流程

假设一个 CIF文件中有40原子

Step1:首先找邻居

对每个原子,在半径8Å内找最近的12个邻居 原子0: 邻居是 [原子3, 原子7, 原子12, ...] 共12个 原子1: 邻居是 [原子0, 原子5, 原子8, ...] 共12个 原子2: 邻居是 [原子1, 原子6, 原子15, ...] 共12个 ... 原子39: 邻居是 [原子2, 原子11, 原子38, ...] 共12个

Step2: 计算每对原子之间的距离

距离邻居0邻居1邻居12
原子02.1Å2.3Å3.2Å
原子12.2Å1.9Å3.1Å
原子21.7Å1.8Å3.6Å
原子401.5Å2.1Å3.9Å

这是一个 (40, 12) 的距离矩阵
40个原子 × 12个邻居 = 480个距离值

Step3: 对每个距离值做高斯扩展

关键理解:每个距离值独立扩展! 距离矩阵中的每一个格子(共480个): 1个距离 → 41维向量 例如: 原子0到邻居0的距离 2.1Å → [0.00, 0.00, ..., 0.78, 1.00, 0.78, ..., 0.00] (41维) 原子0到邻居1的距离 1.8Å → [0.00, 0.00, ..., 0.78, 1.00, 0.78, ..., 0.00] (41维) ... 共480个距离,每个变成41维

Step 4: 维度变化

输入: 距离矩阵 (40, 12) ↓ 480个距离值,每个做高斯扩展 ↓ 输出: 特征张量 (40, 12, 41) 形状含义: 40 = 原子数量 12 = 每个原子的邻居数量 41 = 每个距离扩展成的向量维度

Step5: 代码

pythonimport numpy as np # 模拟:40个原子,每个12个邻居 n_atoms = 40 n_neighbors = 12 # 随机生成距离矩阵(实际中从CIF计算得到) distances = np.random.uniform(1.0, 6.0, size=(n_atoms, n_neighbors)) print(f"距离矩阵形状: {distances.shape}") # (40, 12) # 高斯扩展 class GaussianDistance: def __init__(self, dmin=0, dmax=8, step=0.2): self.filter = np.arange(dmin, dmax + step, step) # 41个中心 self.var = step def expand(self, distances): return np.exp(-(distances[..., np.newaxis] - self.filter) ** 2 / self.var ** 2) gdf = GaussianDistance() expanded = gdf.expand(distances) print(f"扩展后形状: {expanded.shape}") # (40, 12, 41) print(f"高斯中心数: {len(gdf.filter)}") # 41

输出:

距离矩阵形状: (40, 12) 扩展后形状: (40, 12, 41) 高斯中心数: 41

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询