Почему networkx.degree_assortativity_coefficient вызывает предупреждение о времени выполнения? - PullRequest
0 голосов
/ 19 февраля 2019

Я использую код networkx, который я написал, и думаю, что эта строка вызывает проблему:

nx.degree_assortativity_coefficient(G)

lib/python3.7/site-packages/networkx/algorithms/assortativity/correlation.py:288: RuntimeWarning: invalid value encountered in double_scalars
  return (xy * (M - ab)).sum() / numpy.sqrt(vara * varb)

Если я иду в сеть x исходный код этопредположительно, функция вызывает предупреждение:

def numeric_ac(M):
    # M is a numpy matrix or array
    # numeric assortativity coefficient, pearsonr
    try:
        import numpy
    except ImportError:
        raise ImportError('numeric_assortativity requires ',
                          'NumPy: http://scipy.org/')
    if M.sum() != 1.0:
        M = M / float(M.sum())
    nx, ny = M.shape  # nx=ny
    x = numpy.arange(nx)
    y = numpy.arange(ny)
    a = M.sum(axis=0)
    b = M.sum(axis=1)
    vara = (a * x**2).sum() - ((a * x).sum())**2
    varb = (b * x**2).sum() - ((b * x).sum())**2
    xy = numpy.outer(x, y)
    ab = numpy.outer(a, b)
    return (xy * (M - ab)).sum() / numpy.sqrt(vara * varb)

Что здесь не так?

1 Ответ

0 голосов
/ 18 июля 2019

Это относится к вашему графику.

Например, полный граф всегда будет приводить к такой проблеме, потому что все vara и varb в полном графе равны 0. Разделение 0 вызывает «недопустимое значение, с которым встречаются»в double_scalars "предупреждение.

Кроме этой экстремальной ситуации, мы также не можем вычислить ассортативность некоторых других графиков.Чтобы выяснить, почему, я настоятельно рекомендую вам проверить формулу для сортировки:

https://en.wikipedia.org/wiki/Assortativity

Обратите внимание, что неориентированный граф и ориентированный граф различны.Последний может иметь 4 пары ассортимента.(т.е. (вход, выход), (выход, выход), (вход, выход), (выход, вход))

...