我正在尝试读取一个包含10000多个条目和3列的文件。第1列和第2列是节点,第3列是以秒为单位的时间。我最初试图用数据绘制随机图G =(n,m),然后想要从两个相对节点之间的第3列分配数据。之后,我必须计算该图中的节点,边,桥的数量。 我是一些在这里失去的东西。如果我应该首先绘制图形然后进行计数,或者我应该计算,然后绘制图形。任何建议都会有所帮助。
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import scipy as sy
import itertools as it
import time
with open("File.txt") as f:
data = f.read()
data = data.split('\n')
node_one = [row[0] for row in data]
node_two = [row[1] for row in data]
def draw_graph(graph):
G = nx.Graph()
#G.add_edges_from([(node_one[0], node_two[1]])
#G.add_edges_from(node_one, node_two)
G.number_of_nodes()
G.number_of_edges()
G.neighbors(edge[0], edge[1])
n = nx.number_connected_components(G)
bridge_count = 0
for edge in G.edges():
if len(set(G.neighbors(edge[0])) & set(G.neighbors(edge[1]))) == 0:
G.remove_edge(edge[0], edge[1])
if nx.number_connected_components(G) > n:
print edge, 'is a bridge'
bridge_count += 1
G.add_edge(edge[0], edge[1])
print number_of_nodes()
print number_edges()
print neighbors()
print bridge_count
我到这里的错误是 Traceback(最近一次调用最后一次): 文件“edge_bridge.py”,第13行,
node_one = [row[0] for row in data]
IndexError:字符串索引超出范围
答案 0 :(得分:2)
G.number_of_nodes()
G.number_of_edges()
可以为你做计数,它们可以单独完成而不是绘制图形。 可以按照here指令添加边缘属性。
这里对桥的定义是什么,两个节点之间没有共同邻居的边缘?为此,您可以遍历每个边缘并查找两个端节点的公共邻居。如果没有共同的邻居,那就是一个过渡的关系。
如果桥的定义是一个边缘,当删除时,会产生更多未连接的组件,如注释中的@mdml所述。您可以执行与上述相同的迭代,再添加一个步骤。当没有共同的邻居时,从图表中删除边缘,计算连接组件的数量,如果数量增加,那就是桥梁。然后记住在迭代到下一个边缘之前将边缘放回图形。 类似下面的东西
G = nx.Graph()
G.add_edges_from([(1,2), (1,3), (2,3), (2,4), (2,5), (5,6), (6,7), (5,7)])
n = nx.number_connected_components(G)
bridge_count = 0
for edge in G.edges():
if len(set(G.neighbors(edge[0])) & set(G.neighbors(edge[1]))) == 0:
G.remove_edge(edge[0], edge[1])
if nx.number_connected_components(G) > n:
print edge, 'is a bridge'
bridge_count += 1
G.add_edge(edge[0], edge[1])
print bridge_count
输出
(2, 4) is a bridge
(2, 5) is a bridge
2