运行 一个程序直到 networkx.check_planarity() returns True
Running a program until networkx.check_planarity() returns True
我有以下生成图表的函数。
import numpy as np
import networkx as nx
import random
def random_graph(vertices, connectivity):
#Creates random symmetric graph
arr = np.random.randint(0,10,(vertices,vertices))
sym = (arr+arr.T)
#removing self loops with fixing diagonal
np.fill_diagonal(sym,0)
#connectivity of graph -> 0 for highest connections, 9 for least connections
mat = (sym>connectivity).astype(int)
#convert to dictionary
G = {k:[i for i,j in enumerate(v) if j==1] for k,v in enumerate(mat)}
return G
我将该函数与随机生成的连接一起使用,不幸的是生成的图形并不总是平面的,所以我想 运行 该函数直到我得到一个平面图。使用 networkx
中的函数 check_planarity
检查图形的平面性。函数 check_planarity
returns 一个布尔值,如果为真,则图形是平面的,如果为假,则图形不是平面的,我需要生成一个新图形,直到它是平面的。这是我试过的:
while True:
random_connectivity = random.randint(4, 9)
G = random_graph(5, random_connectivity)
g = nx.Graph(G)
planar = nx.check_planarity(g)
if planar:
break
else:
pass
正如您从上面的循环中看到的那样,首先我生成 random_connectivity
,然后我使用该连通性创建图形,然后使用 networkx
检查平面性。然后我尝试检查它是否是平面的,如果不是,我再次 运行 程序。不幸的是,它不起作用,因为它通常 returns 是一个非平面图。我还尝试解包 planar
并检查解包列表的第一个元素,但它不起作用:
planar_check = [x[0] for x in planar]
尝试上面的代码行时,我得到以下回溯:
Traceback (most recent call last):
File "c:\Users\besan\OneDrive\Desktop\LAM da correggere\test.py", line 64, in <module>
planar_check = [x[0] for x in planar]
File "c:\Users\besan\OneDrive\Desktop\LAM da correggere\test.py", line 64, in <listcomp>
planar_check = [x[0] for x in planar]
TypeError: 'bool' object is not subscriptable
通过直接检查 planar
的第一个元素而不是解包来解决:
planar = nx.check_planarity(g)[0]
我有以下生成图表的函数。
import numpy as np
import networkx as nx
import random
def random_graph(vertices, connectivity):
#Creates random symmetric graph
arr = np.random.randint(0,10,(vertices,vertices))
sym = (arr+arr.T)
#removing self loops with fixing diagonal
np.fill_diagonal(sym,0)
#connectivity of graph -> 0 for highest connections, 9 for least connections
mat = (sym>connectivity).astype(int)
#convert to dictionary
G = {k:[i for i,j in enumerate(v) if j==1] for k,v in enumerate(mat)}
return G
我将该函数与随机生成的连接一起使用,不幸的是生成的图形并不总是平面的,所以我想 运行 该函数直到我得到一个平面图。使用 networkx
中的函数 check_planarity
检查图形的平面性。函数 check_planarity
returns 一个布尔值,如果为真,则图形是平面的,如果为假,则图形不是平面的,我需要生成一个新图形,直到它是平面的。这是我试过的:
while True:
random_connectivity = random.randint(4, 9)
G = random_graph(5, random_connectivity)
g = nx.Graph(G)
planar = nx.check_planarity(g)
if planar:
break
else:
pass
正如您从上面的循环中看到的那样,首先我生成 random_connectivity
,然后我使用该连通性创建图形,然后使用 networkx
检查平面性。然后我尝试检查它是否是平面的,如果不是,我再次 运行 程序。不幸的是,它不起作用,因为它通常 returns 是一个非平面图。我还尝试解包 planar
并检查解包列表的第一个元素,但它不起作用:
planar_check = [x[0] for x in planar]
尝试上面的代码行时,我得到以下回溯:
Traceback (most recent call last):
File "c:\Users\besan\OneDrive\Desktop\LAM da correggere\test.py", line 64, in <module>
planar_check = [x[0] for x in planar]
File "c:\Users\besan\OneDrive\Desktop\LAM da correggere\test.py", line 64, in <listcomp>
planar_check = [x[0] for x in planar]
TypeError: 'bool' object is not subscriptable
通过直接检查 planar
的第一个元素而不是解包来解决:
planar = nx.check_planarity(g)[0]