我想为球形Voronoi图的区域生成邻接列表。我正在使用SciPy中的SphericalVoronoi class,因此我可以使用的唯一信息是图表的中心和顶点。
我提出的最好的事情是检查每对区域是否有共同的顶点(vor
是SphericalVoronoi的实例):
def adjacent(vor, reg1, reg2):
for i in vor.vertices[reg1]:
if i in vor.vertices[reg2]: return True
return False
adjacencies = [[] for i in range(len(vor.regions))]
for i in range(npoints):
for j in range(i,npoints):
if adjacent(vor,vor.regions[i],vor.regions[j]):
adjacencies[i].append(j)
adjacencies[j].append(i)
有更有效的方法吗?
答案 0 :(得分:0)
查找它所在的每个顶点区域更有效,并使用该信息查找哪些区域是邻居。
类似的东西:
# Vertex - region adjacencies
vert2region = defaultdict(list)
for i, region in enumerate(vor.regions):
for v in region:
vert2region[v].append(i)
# Region - region adjacencies
adjacencies = defaultdict(set) # set is important not to have same adjacency twice
for v, regions in vert2region.items():
for r1, r2 in itertools.combinations(regions, 2):
adjacencies[r1].add(r2)
adjacencies[r2].add(r1)