Вы были близки, за исключением последнего цикла, где вы должны снова выполнить итерации по спискам соседей и затем сохранить расстояния
import numpy as np
import networkx as nx
# Since I didn't have your data, I simply recreated from your R code
graph = nx.Graph()
for i in range(1, 5):
graph.add_node(i)
for x,y in [(4, 3), (4, 1), (4, 2), (3, 2), (3, 1)]:
graph.add_edge(x, y)
# print(graph.edges())
# Output EdgeView([(4, 3), (4, 1), (4, 2), (3, 2), (3, 1)])
distance_neighbors = {}
for edge in list(graph.edges):
neighbor1 = tuple(graph.neighbors(edge[0]))
neighbor2 = tuple(graph.neighbors(edge[1]))
distance_list = []
for v1 in neighbor1:
for v2 in neighbor2:
distance_list.append(nx.shortest_path_length(graph, source=v1, target=v2))
distance_neighbors[edge] = distance_list
Distance_neighbours содержит следующие данные:
{(1, 3): [0, 1, 1, 1, 1, 1],
(1, 4): [1, 1, 1, 0, 1, 1],
(2, 3): [0, 1, 1, 1, 1, 1],
(2, 4): [1, 1, 1, 0, 1, 1],
(3, 4): [1, 1, 1, 1, 2, 0, 1, 0, 2]}
Порядок значения в последнем ребре (3,4) отличается тем, что Python упорядочивает соседей по-разному, как это делает R. Чтобы убедиться в том, что поведение одинаково, выполните следующеекод:
import os
import numpy as np
import networkx as nx
# Since I didn't have your data, I simply recreated from your R code
graph = nx.Graph()
for i in range(1, 5):
graph.add_node(i)
for x,y in [(4, 3), (4, 1), (4, 2), (3, 2), (3, 1)]:
graph.add_edge(x, y)
# print(graph.edges())
# Output EdgeView([(4, 3), (4, 1), (4, 2), (3, 2), (3, 1)])
distance_neighbors = {}
for edge in list(graph.edges):
# Just sort the neighbours list in reverse order
neighbor1 = tuple(sorted(graph.neighbors(edge[0]), reverse=True))
neighbor2 = tuple(sorted(graph.neighbors(edge[1]), reverse=True))
distance_list = []
for v1 in neighbor1:
for v2 in neighbor2:
distance_list.append(nx.shortest_path_length(graph, source=v1, target=v2))
distance_neighbors[edge] = distance_list
Теперь distance_neighbors
имеет тот же вывод, что и ваш код R:
{(1, 3): [0, 1, 1, 1, 1, 1],
(1, 4): [1, 1, 1, 0, 1, 1],
(2, 3): [0, 1, 1, 1, 1, 1],
(2, 4): [1, 1, 1, 0, 1, 1],
(3, 4): [1, 1, 1, 1, 0, 2, 1, 2, 0]}
Вот ссылка на блокнот Google Colab скод выше.
Надеюсь, это поможет!