1

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

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

4

1 回答 1

2

由于 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
于 2019-06-13T18:21:04.697 回答