Я пытаюсь рассчитать глобальную эффективность графика в igraph, но я не уверен, правильно ли я использую модуль. Я думаю, что есть решение, которое может иметь смысл, но оно находится в r, и я не смог расшифровать, что они говорили.
Я пытался написать код в стиле networkx, пытаясь подражать тому, как они вычисляют глобальную эффективность, но пока безуспешно. Я использую igraph из-за того, что имею дело с большими графами. Любая помощь будет очень признательна: D
Это то, что я пробовал:
import igraph
import pandas as pd
import numpy as np
from itertools import permutations
datasafe = pd.read_csv("b1.csv", index_col=0)
D = datasafe.values
g = igraph.Graph.Adjacency((D > 0).tolist())
g.es['weight'] = D[D.nonzero()]
def efficiency_weighted(g):
weights = g.es["weight"][:]
eff = (1.0 / np.array(g.shortest_paths_dijkstra(weights=weights)))
return eff
def global_efficiecny_weighted(g):
n=180.0
denom=n*(n-1)
g_eff = sum(efficiency_weighted(g) for u, v in permutations(g, 2))
return g_eff
global_efficiecny_weighted(g)
Сообщение об ошибке, которое я получаю, говорит: - TypeError: объект «График» не является итерируемым