我是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.
我在做什么错?
错误仅是-节点列表包含重复项:
>>> 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)])