NetworkX: линейный график и его дополнение

1

Мне нужно сгенерировать и нарисовать линейный график и добавить второй график, который я загружаю из.txt файла в виде списка смежности. Я уже много раз пробовал, но я получаю только ошибки. Пока нет прогресса...

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

a = np.loadtxt('adjacencymatrix.txt', dtype=int) 
Теги:
graph
line
networkx
complement

1 ответ

2
Лучший ответ

Вы можете попробовать получить дополнение матрицы смежности. Здесь я предполагаю, что ваша матрица смежности состоит из 0 и 1. Итак, предположим, что вы являетесь матрицей смежности, хранящейся внутри adjacency.txt:

0,0,1,0,1,1
0,0,1,1,0,1
1,1,0,0,1,0
0,1,0,0,1,0
1,0,1,1,0,1
1,1,0,0,1,0

Теперь давайте построим график

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
A = np.loadtxt('adjacency.txt', delimiter=',', dtype=int) 
G = nx.from_numpy_matrix(np.array(A))
nx.draw(G, with_labels=True)

Изображение 174551

Теперь, чтобы вытянуть дополнение к графику, я предполагаю здесь, что вы хотите как-то дополнить края. Итак, поскольку у вас есть матрица смежности, вы можете инвертировать ее с помощью np.bitwise_xor (или любым другим способом изменить 1s на 0s и наоборот), так как XOR-ing бит с 1 инвертирует его (т.е. 1 становится 0 и 0 становится 1)

B = np.bitwise_xor(A,1)
G = nx.from_numpy_matrix(np.array(B))
nx.draw(G, with_labels=True)

Изображение 174551

Как вы можете, края графа перевернуты. Например, в начальном графе node 3 имел ребра к node 1 и node 4, тогда как в инвертированном графе он имеет ребра к другим узлам, то есть nodes 2, 5 and 3

** Примечание: ** Существуют другие способы инвертировать массив numpy. Не существует жесткого и быстрого правила использования bitwise_xor. Вот более простой способ сделать это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню