有没有办法显示rdkit.Chem.rdmolops.GetAdjacencyMatrix中原子的索引?

时间:2019-06-13 13:32:35

标签: rdkit cheminformatics

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

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

1 个答案:

答案 0 :(得分:1)

由于RDKit AdjacencyMatrix从零开始向上排序,因此可以将其转换为Pandas数据框。

from rdkit import Chem
import pandas as pd

s = 'CCC(C(O)C)CN'
mol = Chem.MolFromSmiles(s)

mol with numbers

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