Чтобы найти изолированные вершины, вы можете сформировать график degree matrix, а затем искать 0 по диагонали. Вот два примера график:
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
# star adjacency matrix
star_adj = np.array([[0, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0]])
# gr = nx.from_numpy_matrix(star_adj)
# nx.draw(gr)
# plt.show()
Мы не ожидаем каких-либо изолированных вершин в этой звезды графике.
iso_adj = np.array([[0, 1, 1, 0, 0], [1, 0, 1, 0, 0], [1, 1, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]])
вершина этого графа 4 изолирована.
Теперь я нахожу градус_list (этот список эквивалентен главной диагонали матрицы степени, но здесь нет смысла делать всю матрицу, поскольку все, что мы хотим, являются диагональными элементами), суммируя столбцы смежности матрицы (или строк). После этого я печатаю индексы в этом списке, которые являются ==0
.
def degree_list(adjacency_matrix):
return np.sum(adjacency_matrix, axis=1)
star_deg = degree_list(star_adj)
iso_deg = degree_list(iso_adj)
print star_deg # prints: [5 1 1 1 1 1]
print iso_deg # prints: [2 2 3 1 0]
print [i for i, v in enumerate(star_deg) if v==0] # prints: []
print [i for i, v in enumerate(iso_deg) if v==0] # prints: [4]
Наконец, для матрицы смежности ваш пост, здесь изолированная вершина:
c_adj = [[0,1,0,0,0,1], [1,0,1,0,0,0], [0,1,0,1,0,0], [0,0,1,0,0,1], [0,0,0,0,0,0], [1,0,0,1,0,0]]
print [i for i, v in enumerate(degree_list(c_adj)) if v==0] # prints [4]
- Линия
i, v in enumerate(blah)
получает индекс i
и значение v
из blah
, enumerate().
Итак, вы спрашиваете, как пройти график? Можете ли вы определить изолированный? – sparkyShorts
Ищите любую строку в матрице, состоящую из всех '0' s (если ваше определение 'isol'' не связано с каким-либо узлом ') – inspectorG4dget
изолированная вершина не является конечной точкой любого ребра и является вершиной со степенью ноль – connie