背景:
我在做聚合物模拟。我正在尝试使用networkx来计算系统中的链数。系统内的分子等于节点,键等于节点之间的连接。
我尝试过的:
我用networkx.chain_decompostion来计算链的数目。
import networkx as nx
info = nx.chain_decomposition(G)问题:
我发现它只找到闭环的链,比如A1-A2-A3-A1。
然而,仍然有许多链是不关闭的,如A1-A2-A3。
有一个简单的方法来收集这两种类型的链条。谢谢!
发布于 2018-10-12 09:24:44
函数chain_decomposition不是您所认为的那样。从医生那里:
具有深度优先搜索树的图的链分解是从树的基本循环集合导出的一组循环或路径。
您可能需要的是函数number_connected_components。详情请参见此链接。这假设每个连通分量都是一个链,即图G中有几个不相交的子图,每个子图对应于一个(非分支)聚合物分子。如果不是这种情况(聚合物是支化的),那么我需要做一些更聪明的事情。例如,您可以计算离开节点之间的所有最短路径(具有单个键的原子)。您可以通过使用list(G.degree) (叶子有1级)检查这些节点的程度来找到叶节点,然后用all_shortest_paths计算所有叶对之间的最短路径。要找到环状分子,你可以像以前一样使用chain_decomposition。
https://stackoverflow.com/questions/52763751
复制相似问题