从networkx.lattice.grid_2d_graph获取邻接矩阵和图

时间:2019-01-22 00:59:40

标签: python graph networkx

我必须创建尺寸为mxn的格子图。

在networkx中,我将执行以下操作:

N = 5
M = 4 
G = nx.generators.lattice.grid_2d_graph(N,M, periodic=True)

,我希望得到一个networkx.graph对象。

问题是,如果我打电话给实例

G.nodes

它不将节点列表打印为矢量。 例如,如果我不是使用grid_2d_graph,而是会使用:

G = nx.erdos_renyi_graph(int(N),0.3)
print G.nodes

我会得到一个数字列表

[0,1,2,3,4...,N]

如果是格子图,我会得到:

[(0, 1), (1, 2), (3, 2), (0, 0), (3, 3), (3, 0), (3, 1), (2, 1), (0, 2), (2, 0), (1, 3), (2, 3), (4, 3), (2, 2), (1, 0), (4, 2), (0, 3), (4, 1), (1, 1), (4, 0)]

就像一个矩阵。

我想获得一个节点向量(在另一种情况下)和该图的邻接矩阵。我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是节点列表,您只是不认识它,因为名称不是整数。对于2d晶格,节点以其坐标命名。因此(0,1)是一个节点。

尝试一下:

import networkx as nx
N = 5
M = 4 
G = nx.generators.lattice.grid_2d_graph(N,M, periodic=True)
list(G.neighbors((0,10)))
> [(1, 1), (0, 0), (0, 2), (4, 1)]
G.degree((0,1))
> 4

[注意,您似乎正在使用networkx 1.11或更早版本。在2.x中,G.nodes是“ NodeView”而不是列表。如果升级,则可以使用list(G.nodes)将“ NodeView”转换为列表,就像我对G.neighbors所做的一样(在较新的networkx版本中也不是列表)]。

如果您不希望节点为元组,则可以使用nx.relabel_nodes重新标记它们。让我知道您是否需要帮助。