networkx:Graph.nodes()不一致的行为?

时间:2015-01-25 11:31:47

标签: python networkx

从我未定的G.nodes()或G.nodes(False)应该返回一个节点列表。但是我发现虽然这有效:

G = nx.watts_strogatz_graph(1000, 20, 0)
random.choice(G.nodes())

这不是:

G = nx.grid_graph([20,20])
random.choice(G.nodes())
->
  File "mtrand.pyx", line 1016, in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:7850)
ValueError: a must be 1-dimensional

当我在2.情况下检查G.nodes()的形状时,无论我使用G.nodes(False)还是G.nodes(True),它总是(400,2)。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这取决于random的定义方式。如果random是标准库中的模块,则:

import random
random.choice(G.nodes())

会奏效。如果randomnumpy.random,那么

from numpy import random
random.choice(G.nodes())

将提出

/usr/lib/python2.7/dist-packages/numpy/random/mtrand.so in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:7850)()

ValueError: a must be 1-dimensional

请注意,错误消息中的路径是指numpy/random


为避免将来出现此错误,请不要使用from numpy import random,因为它会屏蔽标准库中的同名模块。

出于同样的原因,请不要使用from numpy import *,因为它还会将maxminsumany和{ {1}}。