背景:
我正在做聚合物模拟。我正在尝试使用networkx
来计算系统中有多少个链。系统内部的分子等于节点,键合等于节点之间的连接。
我尝试过的事情:
我使用networkx.chain_decompostion
来计算链的数量。
import networkx as nx
info = nx.chain_decomposition(G)
问题:
我发现它只能找到闭环的链,例如A1-A2-A3-A1
。
但是,仍有许多未关闭的链,例如A1-A2-A3
。
是否有一种简单的方法来收集两种类型的链。谢谢!
答案 0 :(得分:0)
函数chain_decomposition
并不是您想的那样。从文档中:
关于深度优先搜索树的图的链分解是从树的基本循环集合中导出的一组循环或路径[...]
您可能正在寻找的是函数number_connected_components
。
有关详情,请参见this link。这假定每个连接的组件都是一条链,即,图G中有几个不相交的子图,每个子图对应于一个(非分支)聚合物分子。如果不是这种情况(聚合物是分支的),那么我需要做一些更聪明的事情。例如,您可以计算休假节点(单键原子)之间的所有最短路径。
您可以通过检查具有list(G.degree)
的节点的度数(叶的度数为1)来找到叶节点,然后使用all_shortest_paths
计算所有叶对之间的最短路径。
要查找环状分子,您可以像以前一样使用chain_decomposition
。