Как в python реализовать вычисление матрицы расстояний методом возведения матрицы смежности в степень? Мне нужно реализовать вычисление матрицы расстояний методом возведения матрицы смежности в степень. На вход подается граф, на выход - матрица дистанций (список списков целых чисел). Подскажите как получить матрицу расстояний?
У меня получается найти только матрицу смежности:import networkx as nx
from networkx import DiGraph
digraph = DiGraph()
for node_val in range(1, 8):
digraph.add_node(node_val)
digraph.add_edge(1, 2)
digraph.add_edge(1, 3)
digraph.add_edge(1, 4)
digraph.add_edge(2, 4)
digraph.add_edge(2, 5)
digraph.add_edge(3, 6)
digraph.add_edge(4, 3)
digraph.add_edge(4, 6)
digraph.add_edge(4, 7)
digraph.add_edge(5, 4)
digraph.add_edge(5, 7)
digraph.add_edge(7, 6)
adj_matrix_sparse = nx.adjacency_matrix(digraph)
adj_matrix_dense = adj_matrix_sparse.todense()
print(adj_matrix_dense)

21 Авг 2019 в 06:06
439 +1
1
Ответы
1

Для вычисления матрицы расстояний методом возведения матрицы смежности в степень вам потребуется использовать библиотеку numpy. Вот как это можно сделать:

import numpy as np
# Преобразование матрицы смежности в матрицу дистанций
def distance_matrix(adj_matrix):
num_nodes = len(adj_matrix)
distances = np.array(adj_matrix)
for i in range(2, num_nodes + 1):
distances = np.dot(distances, adj_matrix)
for j in range(num_nodes):
for k in range(num_nodes):
if distances[j][k] > 0:
distances[j][k] = 1
return distances
# Преобразование матрицы смежности в обычный список списков
def adjacency_matrix_to_list(adj_matrix):
adjacency_list = adj_matrix.tolist()
return adjacency_list
# Создание матрицы смежности из графа
adj_matrix_sparse = nx.adjacency_matrix(digraph)
adj_matrix_dense = adj_matrix_sparse.todense().tolist()
# Вычисление матрицы расстояний
distance_matrix = distance_matrix(adj_matrix_dense)
print(distance_matrix)

Этот код сначала определяет функцию distance_matrix, котор принимает матрицу смежности в виде numpy.ndarray и возвращает матрицу расстояний. Далее определяется функция adjacency_matrix_to_list, котор преобразует матрицу смежность в обычный список списков. Затем создается матрица смежности из графа и вычисляется матрица расстояний с использованием функции distance_matrix. Результат выводится на экран.

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир