【发布时间】:2015-11-10 00:23:44
【问题描述】:
我有一个文本文档,它是一个边缘列表文件。我知道如何读取文件(使用 Canopy Enthought),但我不知道如何获取我想要的图表信息。
主要问题:有没有办法使用 networkx 命令检测这个图(从边缘列表文件创建)是有向的还是无向的?或者只是称重或不称重?
【问题讨论】:
我有一个文本文档,它是一个边缘列表文件。我知道如何读取文件(使用 Canopy Enthought),但我不知道如何获取我想要的图表信息。
主要问题:有没有办法使用 networkx 命令检测这个图(从边缘列表文件创建)是有向的还是无向的?或者只是称重或不称重?
【问题讨论】:
我相信在使用边缘列表文件之前,您必须指定图形的类型。因为边缘列表文件只是由包含要连接的节点的元组组成,而没有说明它们是如何连接的。因此,例如,如果您创建一个图形G = nx.Graph(),那么如果文件中的节点对重复,它们之间仍然会有一条边,节点的顺序无关紧要; ((node1,node2) 等价于 (node2,node1))。如果您将图形创建为G = nx.DiGraph(),则节点的顺序会有所不同。此外,在重复的情况下,指定G = nx.MultiGraph() 将存在多个边缘。 G = nx.MultiDiGraph() 在读取边缘列表文件时会有不同的结果。因此,请检查图形类型 documentation 以了解您需要具有哪种类型。
要检查图表是否定向,您可以使用
nx.is_directed(G),你可以找到文档here。
检查图表是否加权 没有特定类型可以说明图是否具有加权边。但是解决方法是检查边是否包含名为 weight 的属性,如 here 所述。可以通过
'weight' in G[1][2] # Returns true if an attribute called weight exists in the edge connecting nodes 1 and 2.
【讨论】: