使用Python Networkx和纽比。选择&获得价值

2024-04-25 06:49:38 发布

您现在位置:Python中文网/ 问答频道 /正文

语言:Python 2.x 软件包:Networkx、Numpy

我的代码从图表中随机选取一个节点,然后执行以下操作:

1-如果它是一个隔离,回到while循环的开头,然后随机选择另一个节点

如果它不是孤立的,找它的邻居

3-如果它只有一个邻居,那么随机选取的邻居就是唯一的邻居

4-如果它有多个邻居,那么从可用的选项中随机选择一个邻居

5-这个随机选择,检查它是否有邻居。就像上面一样。。如果它有一个,那么就把邻居的邻居设为那个邻居

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)

File "D:\network.py", line 108, in triadic_method random_neighb = numpy.random.choice(Neighbs) File "mtrand.pyx", line 1121, in mtrand.RandomState.choice (numpy\random\mtrand\mtrand.c:12473) File "mtrand.pyx", line 945, in mtrand.RandomState.randint (numpy\random\mtrand\mtrand.c:10732) ValueError: low >= high

错误引用的第108行是:

随机分布=数字随机选择(Neighbs)这是错误引用的第108行


Tags: selfnumpynode错误neighborsrandomnetworkorigin
2条回答

您看到的ValueError来自numpy.random.randint,当'low'和'high'输入顺序不正确时,该错误就会出现。很难理解你为什么会出错。假定choice函数正在调用randint,参数基于输入Neighbs的特性。在

我会在打电话之前打印Neighbs的值,看看你到底在要求它做什么。在

这可能是因为您正在使用定向网络。在有向网络中,非孤立节点可能没有邻居。例如,有两个节点a,b和从a到b的一条边,a和b都不孤立,a将有邻居b,但b没有邻居。在

NetworkX将isolated定义为没有传入和传出的边缘,但是邻居没有引用前导。在

如果你应用np.随机选择在一个空列表中,您将得到这里所述的错误。在

相关问题 更多 >