Есть ли способ показать индекс атомов в rdkit.Chem.rdmolops.GetAdjacencyMatrix? - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь преобразовать соединение из моль в матрицу смежности. Однако я столкнулся с проблемой, что rdkit.Chem.rdmolops.GetAdjacencyMatrix () не предоставляет индекс атомов для матрицы смежности. Есть ли способ включить данные индекса для матрицы смежности в rdkit?

rdkit.Chem.rdmolops.GetAdjacencyMatrix ((моль) моль)

1 Ответ

1 голос
/ 13 июня 2019

Поскольку 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
...