如何有效地获得球形Voronoi图的邻接列表?

时间:2017-05-31 13:38:16

标签: python graph scipy graph-algorithm voronoi

我想为球形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)

有更有效的方法吗?

1 个答案:

答案 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)