我必须创建一个维度为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)]
这就像一个黑客帝国。
我想得到一个节点向量(和另一个例子一样)和这个图的邻接矩阵。我能做什么?
发布于 2019-01-22 10:02:00
它是一个节点列表,您只是无法识别它,因为名称不是整数。对于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重新标记它们。如果你需要帮助,请告诉我。
https://stackoverflow.com/questions/54299842
复制相似问题