Networkx:为给定的一组节点创建一个完整的图

Networkx: Creating a complete graph for a given set of nodes

我有一个列表 c4_leaves = [56,78,90,112]。我正在尝试使用 c4_leaves 中的这些元素作为节点来创建一个完整的图表。这是我尝试过的;

    V_ex = c4_leaves
    G_ex = nx.Graph() 
    G_ex.add_nodes_from(V_ex)
    G_ex = nx.complete_graph(4)


    for u,v in G_ex.edges():
        G_ex[u][v]['distance'] = distance(points33, u, v)

然后上图的最小生成树为:

 T_ex= nx.minimum_spanning_tree(G_ex, weight='distance')
 F_ex = list(T_ex.edges())

当我绘制 G_ex 时,它给出了正确的图形,但是当我打印最小生成树的详细信息时,它显示 T_ex.nodes() = [0,1,2,3,56,78,90,112].

有人可以告诉我我正在做的错误吗?

命令 G_ex = nx.complete_graph(4) 创建一个完整的图 G,其节点为 0、1、2 和 3。然后您向 G 添加更多,但它具有这些节点。

不要使用 complete_graph,它会生成一个包含其他节点的新的完整图,而是按如下方式创建所需的图:

import itertools
import networkx as nx

c4_leaves = [56,78,90,112]
G_ex = nx.Graph()
G_ex.add_nodes_from(c4_leaves)
G_ex.add_edges_from(itertools.combinations(c4_leaves, 2))

在有向图的情况下使用:

G_ex.add_edges_from(itertools.permutations(c4_leaves, 2))

老问题了。但是,我仍然将我的两分钱投入其中。我遇到了同样的问题。我不确定实际问题的阻塞点到底是什么,但我会写下我所做的。

所以,我想创建一个包含四个节点(56、78、90 和 112)的完整图。我有一个清单。我查阅了 complete_graph 的定义,这是我看到的

Signature: nx.complete_graph(n, create_using=None)
Docstring:
Return the complete graph `K_n` with n nodes.

Parameters
----------
n : int or iterable container of nodes
    If n is an integer, nodes are from range(n).
    If n is a container of nodes, those nodes appear in the graph.
create_using : NetworkX graph constructor, optional (default=nx.Graph)
   Graph type to create. If graph instance, then cleared before populated.

Examples
--------
>>> G = nx.complete_graph(9)
>>> len(G)
9
>>> G.size()
36
>>> G = nx.complete_graph(range(11, 14))
>>> list(G.nodes())
[11, 12, 13]
>>> G = nx.complete_graph(4, nx.DiGraph())
>>> G.is_directed()
True

这意味着它可以接受一个迭代器。本着同样的精神,我尝试了以下代码

In [6]: l = [56,78,90,112]

In [7]: G = nx.complete_graph(l)

In [8]: G.edges(data=True)
Out[8]: EdgeDataView([(56, 78, {}), (56, 90, {}), (56, 112, {}), (78, 90, {}), (78, 112, {}), (90, 112, {})])
    
In [10]: G.nodes(data=True)
Out[10]: NodeDataView({56: {}, 78: {}, 90: {}, 112: {}})

所以,你有它,一个由列表构建的完整图表。

我希望这能回答问题。