python - 如何高效迭代MDAnalysis轨迹并保存残差属性时间序列?

标签 python mdanalysis

我有一些使用 MDAnalysis 的工作代码,将残差质量中心时间序列保存在数组中,但我想知道是否有更 Pythonic 或整体高效/快速的方法(理解、数组操作...)来做到这一点.

import MDAnalysis as mda
mdau = mda.Universe(pdb, xtc)
arr = np.empty(( len(mdau.select_atoms("protein").residues), len(mdau.trajectory), 3 ))
# 288 protein residues, 1250 frames and 3 xyz-coordinates per center of mass; this array shape is important
for ts in mdau.trajectory:
    for num, res in enumerate(mdau.select_atoms("protein").residues):
        arr[num, ts.frame] = res.atoms.center_of_mass()

我正在使用的 .pdb 和 .xtc 文件可以在以下链接中下载: https://submission.gpcrmd.org/dynadb/files/Dynamics/11579_dyn_169.pdb https://submission.gpcrmd.org/dynadb/files/Dynamics/11576_trj_169.xtc

最佳答案

您可以对代码进行一些更改:

  • 在 for 循环之外选择蛋白质原子,而不是在每次迭代时选择
  • 通过将 compound='residues' 参数传递给 center_of_mass 方法,对残基的质心计算进行向量化
  • 使用ag.n_residuesu.trajectory.n_frames属性

以下是使用这些建议对您的代码进行的更新:

import numpy as np
import MDAnalysis as mda

u = mda.Universe('11579_dyn_169.pdb', '11576_trj_169.xtc')
protein = u.select_atoms("protein")
arr = np.empty((protein.n_residues, u.trajectory.n_frames, 3))

for ts in u.trajectory:
    arr[:, ts.frame] = protein.center_of_mass(compound='residues')

关于python - 如何高效迭代MDAnalysis轨迹并保存残差属性时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70772541/

相关文章:

python - 如何使用 MDAnalysis 分析一组原子的principal_axes 和 moment_of_inertia?

python - 将唯一标签添加到选项卡式行

python - "... object is not iterable"是 "x in y"的误导性错误吗?

python - 生成时将额外的分支添加到树中

python - 在 Windows 上以 Vi 模式使用 Python shell

python - 从文件导入 pygame(无需安装)

pdb - 使用 MDAnalysis 从 pdb 中提取数组中的坐标

python - 使用MDA分析的PCA(python3.7)