из сети x.lattice.grid_2d_graph получить матрицу смежности и граф - PullRequest
0 голосов
/ 22 января 2019

Мне нужно создать решетчатый граф измерений mxn.

В сетиx я бы сделал следующее:

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 голосов
/ 22 января 2019

Это список узлов, вы просто не узнаете его, потому что имена не являются целыми числами. Для двумерной решетки узлы названы по их координатам. Таким образом, (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», а не списком. При обновлении вы можете преобразовать «NodeView» в список, используя list(G.nodes), как я делал с G.neighbors (также не список в более новых версиях networkx)].

Если вы не хотите, чтобы узлы были кортежами, можно поменять их, используя nx.relabel_nodes. Дайте мне знать, если вы хотите помочь с этим.

...