语言:Python 2.x. 套餐:Networkx,Numpy
我的代码从我的图表中选择一个随机节点,然后执行以下操作:
1-如果它是一个孤立的,返回到while循环的开头并选择另一个随机节点
2-如果它不是孤立的,那就把它当作邻居
3 - 如果它只有1个邻居,那么你选择的随机邻居就是只有邻居
4 - 如果它有多个邻居,则从可用选项中选择一个随机邻居
5-随机选择,检查 it 是否有邻居。就像上面一样..如果它有一个而不是将邻居的邻居设置为那个邻居
6 - 如果它有多个,则选择邻居的随机邻居
7-将我邻居的邻居连接到我(原始随机节点)
此代码已经工作,直到我在程序的另一部分中引入了一些小的更改。我知道所有语法都有效,但我根本无法传递错误。下面是我的代码和错误。
while i <= self.iterations:
node_list = nx.nodes(self.origin_network)
random_node = numpy.random.choice(node_list)
#print (" This random node has no neighbors:", self.origin_network.neighbors(random_node))
if nx.is_isolate(self.origin_network, random_node) == True:
i += 1
print (" This random node has no neighbors:", self.origin_network.neighbors(random_node), "on turn", i)
continue
else:
Neighbs = self.origin_network.neighbors(random_node)
if len(Neighbs) == 1:
print ("The neighbor has no additional neighbors", "on turn", i)
random_neighb = Neighbs
else:
random_neighb = numpy.random.choice(Neighbs) ***#This is line 108 which the error references***
neighbs_of_neighb = self.origin_network.neighbors(random_neighb)
if len(neighbs_of_neighb) == 1:
print ("This neighbor has only the original neighbor on turn", i)
random_NofN = neighbs_of_neighb
self.origin_network.add_edge(random_node, random_NofN)
else:
random_NofN = numpy.random.choice(neighbs_of_neighb)
self.origin_network.add_edge(random_node, random_NofN)
print "success"
i += 1
我收到的错误是:
self.triadic_method(self.origin_network , iteration, sim_number)
文件“D:\ network.py”,第108行,在triadic_method中 random_neighb = numpy.random.choice(Neighbs) 文件“mtrand.pyx”,第1121行,在mtrand.RandomState.choice中(numpy \ random \ mtrand \ mtrand.c:12473) 文件“mtrand.pyx”,第945行,在mtrand.RandomState.randint中(numpy \ random \ mtrand \ mtrand.c:10732) ValueError:low&gt; = high
错误引用的第108行是这一行:
random_neighb = numpy.random.choice(Neighbs) #这是错误引用的第108行
答案 0 :(得分:2)
这可能是由于您正在使用定向网络。在有向网络中,非隔离节点可能没有邻居。例如,具有2个节点a,b和从a到b的一个边缘。 a和b都不是孤立的,a会有邻居b,但b没有邻居。
NetworkX将隔离定义为没有传入边缘而没有传出边缘,但是邻居没有引用前一个边缘。
如果您在空列表中应用np.random.choice,则会收到此处所述的错误。
答案 1 :(得分:0)
您看到的ValueError来自numpy.random.randint
,当“低”和“高”输入未正确排序时,会出现错误。很难理解你为什么会收到这个错误。据推测,choice
函数使用基于输入randint
的功能的参数调用Neighbs
。
我首先会在电话会议之前打印Neighbs的值,看看你实际要求它做什么。