【问题标题】:Invert adjacency matrix using networkx使用networkx反转邻接矩阵
【发布时间】:2020-06-27 18:23:52
【问题描述】:

我有很大的无向图(大约 20 万个节点)。我想反转它的邻接矩阵。因此,如果 A 和 B 在第一个图中连接,它们不应该在新图中连接。我该如何处理?

【问题讨论】:

标签: python networkx


【解决方案1】:

您似乎正在寻找Complement Graph。您在 NetworkX 中有一个功能可以做到这一点。这是一个例子:

G = nx.Graph()
G.add_edges_from(((1,2),(1,3),(2,4),(4,5),(5,1),(8,2)))

plt.figure(figsize=(12, 5))
nx.draw(G, with_labels=True, node_color='lightgreen',node_size=500)

H = nx.complement(G)
plt.figure(figsize=(12, 5))
nx.draw(H, with_labels=True, node_color='lightgreen',node_size=500)

【讨论】:

  • 谢谢,但是当我运行您的代码时,它会占用计算机上的所有 RAM(~ 13 GB)并崩溃。仅存储第一张图就需要 1.55 GB。你现在我该如何解决它?
  • 我将页面文件的大小增加到 32 GB,但程序仍然无法运行
【解决方案2】:
def invert_graph(G, v_num = v_num):
    g_2 = generate_empty_graph(v_num)
    for i in range(1, v_num + 1):
        if i%100 == 0:
            print("Inverting ", i)
        non_neighbors = nx.non_neighbors(G, i)
        for neighbor in non_neighbors:
            g_2.add_edge(i, neighbor)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多