Networkx: NetworkXException: список узлов содержит дубликат для модели stochastic_block_model

Я новичок в networkx (версия 2.4) и немного озадачен ошибкой, которую я получаю для stochastic_block_model, когда я пытаюсь добавить список узлов. Я пытаюсь использовать другой атрибут цвета для каждого блока в сети, используя этот код:

import networkx as nx
N_p = 10
N_n = 10
N_0 = 30
sizes = [N_p, N_n, N_0]
probs = [[0.25, 0.05, 0.02],
         [0.05, 0.35, 0.07],
         [0.02, 0.07, 0.40]]
nodelist = ['blue' for i in range(N_p)]
nodelist.extend(['red' for i in range(N_n)])
nodelist.extend(['green' for i in range(N_0)])
G = nx.stochastic_block_model(sizes, probs,nodelist=nodelist, seed=0,directed=1)

Но я получаю следующее сообщение об ошибке:

...
/opt/anaconda3/lib/python3.7/site-packages/networkx/generators/community.py in stochastic_block_model(sizes, p, nodelist, seed, directed, selfloops, sparse)
    576             raise nx.NetworkXException("'nodelist' and 'sizes' do not match.")
    577         if len(nodelist) != len(set(nodelist)):
--> 578             raise nx.NetworkXException("nodelist contains duplicate.")
    579     else:
    580         nodelist = range(0, sum(sizes))

NetworkXException: nodelist contains duplicate.

Что я делаю неправильно?


person Ohm    schedule 26.11.2019    source источник


Ответы (1)


Ошибка как раз в том, что в нодлисте есть дубликаты:

>>> nodelist
['blue'*10, 'red'*10, 'green'*30]

Как в ссылке на вашу документацию:

Вызывает ошибку NetworkXError -

Если вероятности не находятся в [0,1]. Если матрица вероятностей не квадратная (направленный случай). Если матрица вероятностей не симметрична (неориентированный случай). Если список размеров не соответствует нодлисту или матрице вероятности. Если список узлов содержит дубликаты.

Чтобы исправить это, либо не используйте нодлист, либо сделайте что-нибудь вроде следующего:

nodelist = [f'blue_{i}' for i in range(N_p)]
nodelist.extend([f'red_{i}' for i in range(N_n)])
nodelist.extend([f'green_{i}' for i in range(N_0)])
person CDJB    schedule 26.11.2019