【问题标题】:Is there a way to show the index of atoms in rdkit.Chem.rdmolops.GetAdjacencyMatrix?有没有办法显示 rdkit.Chem.rdmolops.GetAdjacencyMatrix 中的原子索引?
【发布时间】:2019-06-13 13:32:35
【问题描述】:

我正在尝试将化合物从 mol 转换为邻接矩阵。但是,我遇到了一个问题,即 rdkit.Chem.rdmolops.GetAdjacencyMatrix() 不提供邻接矩阵的原子索引。有没有办法在rdkit中包含邻接矩阵的索引数据?

rdkit.Chem.rdmolops.GetAdjacencyMatrix((Mol)mol)

【问题讨论】:

    标签: rdkit cheminformatics


    【解决方案1】:

    由于 RDKit AdjacencyMatrix 从零向上排序,您可以将其转换为 Pandas 数据帧。

    from rdkit import Chem
    import pandas as pd
    
    s = 'CCC(C(O)C)CN'
    mol = Chem.MolFromSmiles(s)
    

    am = Chem.GetAdjacencyMatrix(mol)
    print(am)
    
    [[0 1 0 0 0 0 0 0]
     [1 0 1 0 0 0 0 0]
     [0 1 0 1 0 0 1 0]
     [0 0 1 0 1 1 0 0]
     [0 0 0 1 0 0 0 0]
     [0 0 0 1 0 0 0 0]
     [0 0 1 0 0 0 0 1]
     [0 0 0 0 0 0 1 0]]
    
    df = pd.DataFrame(am)
    print(df)
    
       0  1  2  3  4  5  6  7
    0  0  1  0  0  0  0  0  0
    1  1  0  1  0  0  0  0  0
    2  0  1  0  1  0  0  1  0
    3  0  0  1  0  1  1  0  0
    4  0  0  0  1  0  0  0  0
    5  0  0  0  1  0  0  0  0
    6  0  0  1  0  0  0  0  1
    7  0  0  0  0  0  0  1  0
    

    如果你想要元素而不是索引

    element = [atom.GetSymbol() for atom in mol.GetAtoms()]
    print(element)
    
    ['C', 'C', 'C', 'C', 'O', 'C', 'C', 'N']
    
    df_e = pd.DataFrame(am, index=element,  columns=element)
    print(df_e)
    
       C  C  C  C  O  C  C  N
    C  0  1  0  0  0  0  0  0
    C  1  0  1  0  0  0  0  0
    C  0  1  0  1  0  0  1  0
    C  0  0  1  0  1  1  0  0
    O  0  0  0  1  0  0  0  0
    C  0  0  0  1  0  0  0  0
    C  0  0  1  0  0  0  0  1
    N  0  0  0  0  0  0  1  0
    

    【讨论】:

    • 谢谢!但是有没有办法知道每个索引意味着哪个原子?例如,在您的代码中,有没有办法通过 rdkit 知道原子编号 0 是否为碳?
    • 我已经编辑了答案。只需按顺序获取元素即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多