首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机图Python网络读取文件和绘图

随机图Python网络读取文件和绘图
EN

Stack Overflow用户
提问于 2014-07-08 12:35:44
回答 1查看 1.2K关注 0票数 2

我正在尝试读取一个具有类似10000+条目和3列的文件。第1和第2列是节点,第3列是秒的时间。我最初试图用数据绘制一个随机图G=(n,m),然后在两个相对节点之间分配来自第3列的数据。在此之后,我必须计算图中节点、边、桥的数目。我在这里失去了一些东西。如果我先绘制图形,然后进行计数,或者我应该计数,然后绘制图形。任何建议都会有帮助。

代码语言:javascript
复制
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

这里我遇到的错误是回溯(最近一次调用):文件"edge_bridge.py",第13行,在

代码语言:javascript
复制
node_one = [row[0] for row in data]

IndexError:超出范围的字符串索引

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-08 14:49:25

代码语言:javascript
复制
G.number_of_nodes()
G.number_of_edges()

可以为您做计数,它们可以单独完成,而不是绘制出图形。可以在指令这里之后添加边缘属性。

您对桥接器的定义是什么,在没有公共邻居的两个节点之间的一条边?为此,您可以遍历每个边缘并查找两个端节点的公共邻居。如果没有共同的邻居,那就是搭桥领带。

如果桥的定义是删除时的边缘,则会产生更多未连接的组件,如@mdml在注释中所述。您可以执行上面提到的相同的迭代,再增加一个步骤。当没有公共邻居时,从图中删除边缘,计数连接组件的数量,如果数量增加,这就是一个桥。然后记住,在迭代到下一个边之前,将边返回到图中。类似的东西,如下

代码语言:javascript
复制
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

输出是

代码语言:javascript
复制
(2, 4) is a bridge
(2, 5) is a bridge
2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24632037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档