使用Python Networkx和Numpy.Choice&获得ValueError

时间:2016-04-26 16:37:31

标签: python python-2.7 numpy random networkx

语言: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行

2 个答案:

答案 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的值,看看你实际要求它做什么。