Поскольку эксцентриситет графа является максимальным кратчайшим расстоянием, вероятно, проще и быстрее использовать операции с разреженными разреженными матрицами:
import numpy as np
from scipy.sparse.csgraph import connected_components, shortest_path
from scipy.sparse import csr_matrix
def sparse_component_eccentricity(graph, directed=False):
n_components, labels = connected_components(csgraph=graph, directed=directed, return_labels=True)
component_eccentricity = np.zeros(graph.shape[0])
for icomp in range(n_components):
subgraph_indices = np.where(labels == icomp)[0]
subgraph = graph[subgraph_indices][:,subgraph_indices]
dist_matrix = shortest_path(subgraph, directed=directed)
component_eccentricity[subgraph_indices] = np.nanmax(dist_matrix, axis=1)
return component_eccentricity