在networkx无向图中创建新边

时间:2018-04-05 09:42:00

标签: python networkx

我有一个边长权重为10的无向图。以下是代码。

import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()

G.add_edge('a', 'b', weight=1)
G.add_edge('a', 'c', weight=0)
G.add_edge('c', 'd', weight=1)
G.add_edge('c', 'e', weight=1)
G.add_edge('c', 'f', weight=1)

elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 1]
esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 0]

pos = nx.spring_layout(G)  # positions for all nodes

# nodes
nx.draw_networkx_nodes(G, pos, node_size=700)

# edges
nx.draw_networkx_edges(G, pos, edgelist=elarge,
                       width=6)
nx.draw_networkx_edges(G, pos, edgelist=esmall,
                       width=6, alpha=0.5, edge_color='b', style='dashed')

# labels
nx.draw_networkx_labels(G, pos, font_size=20, font_family='sans-serif')

plt.axis('off')
plt.show()

这会生成以下图表。

Sample Graph

现在我想:

  1. 使用边缘权重1检测所有连接的组件(在这种情况下为两个)。
  2. 如果在连接的组件A和连接的组件B之间存在0边缘(在这种情况下为虚线),则在连接组件A的所有节点与具有边缘权重的连接组件B的所有节点之间创建新边0。别无其他。
  3. 我一直在尝试使用循环,但我的程序崩溃,因为我在图中有1000万个节点和25万个连接组件。有没有更快的方法来使用networkx或任何其他库?我们将不胜感激。

    编辑:如果有人告诉我他/她将使用的最快/最有效的方法,我也会感激,这样我就可以尝试一下。

    编辑2:4天后程序崩溃并导致内存不足错误。

0 个答案:

没有答案