#python #graph #networkx #social-networking
#python #График #networkx #социальные сети
Вопрос:
Как я могу получить второй момент (<k^ 2>) распределения степеней неориентированного графа по NetworkX?
Комментарии:
1. суммируйте k ^ 2 по всем узлам, а затем разделите на количество узлов.
2. Это второй момент графика? Есть ли какая-либо разница между типами сетей? Спасибо @Joel
Ответ №1:
Я не уверен, что вы уже нашли ответ, но вот отличная документация по сетевой науке.
Для вашего вопроса, в частности, проверьте главу 4, раздел: «Значение без масштабирования«:
Как указано в комментариях, 2-й момент может быть вычислен путем деления суммы квадратов степеней на количество узлов (при условии, что каждый узел существует только один раз и все имеют одинаковую вероятность).
Вот обобщенная форма этого вычисления для вычисления n_th момента:
def nth_moment(g,n):
s = 0
for node in g.nodes:
s = g.degree[node] ** n
return (s/len(g))
Пример использования функции для вычисления второго момента:
some_graph = nx.barabasi_albert_graph(10000, 2, seed=1)
print(nth_moment(some_graph, 2))
Быстрее — Numpy
import numpy as np
import networkx as nx
g = nx.barabasi_albert_graph(10000, 2, seed=1)
def nth_moment_v2(g,n):
degree_np = np.array(list(dict(g.degree).values()))
return (sum(degree_np**n)/len(g))
Раз:
st = time.time()
print(nth_moment(g,2))
print(time.time()-st)
st = time.time()
print(nth_moment_v2(g,2))
print(time.time()-st)
58.3626
0.017042160034179688
58.3626
0.005998849868774414
Комментарии:
1. Очень хороший и подробный ответ. Это должно быть принятым ответом.