Перестановка и ротация графов с NetworkX - PullRequest
0 голосов
/ 04 мая 2018

Я работаю с Networkx для создания некоторого класса графиков.

Теперь я бы хотел переставить узлы и повернуть график на (80 °, 90 °, 120 ° градусов)

Как я могу применить перестановку и вращение на графиках с NetworkX?

Edit_1:

Учитывая матрицу смежности графа, я хотел бы повернуть граф таким образом, чтобы он сохранял связь ребер и вершин. Единственное, что меняется - это положение узлов.

Что бы я хотел сделать, это повернуть мой график на 90 градусов.

Ввод:

Матрица смежности графа G

процесс:

Применить вращение к G на 90 градусов

Выход:

Повернутая матрица смежности

Это означает, что граф сохраняет свою топологию и только индекс матрицы смежности, который меняет положение.

Например, узлы 1 с индексом 0 после поворота будут, например, с индексом 4.

Что я пробовал?
1) Я присмотрел numpy.random.permutation(), но, похоже, он не принимает параметр поворота.

2) В сети X я не нашел ни одной функции, позволяющей делать ротацию.

EDIT2 Учитывая матрицу смежности 5 * 5 (5 узлов:

adj=[[0,1,0,0,1],
[1,0,1,1,0],
[0,0,0,1,1],
[0,0,1,0,1],
[1,1,1,1,0]
]

Я хотел бы переключаться между индексами. Скажем, что узел 1 заменяет узел 3, узел 3 заменяет узлы 4, а узел 4 заменяет узел 1.

Это просто перестановка узлов (сохранение их ребер).

Я хотел бы сохранить в словаре отображение между исходным индексом и новым индексом после перестановки.

Во-вторых, я хотел бы применить перестановку или поворот этой матрицы смежности на угол 90 °. (Это как применить вращение к изображению). Я не уверен, как это можно сделать.

1 Ответ

0 голосов
/ 08 мая 2018

Посмотрите на команду networkx relabel_nodes.

Учитывая график G, если мы хотим переименовать узел 0 как 1, 1 как 3, а 3 как 0 [так что перестановка узлов, оставляя 2 на месте], мы создаем диктат mapping = {0:1, 1:3, 3:0}. Тогда мы делаем

H = nx.relabel_nodes(G, mapping)

И H теперь переставленный граф.

import networkx as nx
G = nx.path_graph(4)  #0-1-2-3
mapping = {0:1, 1:3, 3:0}
H = nx.relabel_nodes(G, mapping) #1-3-2-0

#check G's adjacency matrix
print(nx.to_numpy_matrix(G,nodelist=[0,1,2,3]))
> [[ 0.  1.  0.  0.]
  [ 1.  0.  1.  0.]
  [ 0.  1.  0.  1.]
  [ 0.  0.  1.  0.]]

#check H's adjacency matrix
print(nx.to_numpy_matrix(H,nodelist=[0,1,2,3]))
> [[ 0.  0.  1.  0.]
  [ 0.  0.  0.  1.]
  [ 1.  0.  0.  1.]
  [ 0.  1.  1.  0.]]
...