使用python/scipy的voronoi和lloyd松弛

使用python/scipy的voronoi和lloyd松弛,python,scipy,voronoi,qhull,Python,Scipy,Voronoi,Qhull,如何使用Qhull确定哪些voronoi单元(通过索引)是“合适的”(由“现有顶点”组成) 我试图使用LLoyds算法和scipy.spatial Voronoi(Qhull的包装器)生成的输入执行约束松弛 就代码而言,它看起来像: points = [n for n in itertools.product(xrange(3),xrange(3))] vor = Voronoi(points) vor2 = lloyd(vor) # my relaxation function - no

如何使用Qhull确定哪些voronoi单元(通过索引)是“合适的”(由“现有顶点”组成)

我试图使用LLoyds算法和scipy.spatial Voronoi(Qhull的包装器)生成的输入执行约束松弛

就代码而言,它看起来像:

points = [n  for n in itertools.product(xrange(3),xrange(3))]
vor = Voronoi(points)

vor2 = lloyd(vor) # my relaxation function  - not relevant to the question
代码生成的输出图看起来正常(见下文) 但vor结构中的数据不足以进行劳埃德松弛。 这是因为我应该只移动有效voronoi单元格内的点(图中为4)。另一个应该保持原样。Qhull扰乱了点/区域的顺序,因此我无法估计哪个区域属于哪个点

以下是问题的说明:

print vor.vertices
#[[ 0.5  0.5]
# [ 1.5  0.5]
# [ 0.5  1.5]
# [ 1.5  1.5]]

print vor.regions  
# [[], [-1, 0], [-1, 1], [1, -1, 0], [3, -1, 2], [-1, 3], [-1, 2], [3, 2, 0, 1], [2, -1, 0], [3, -1, 1]]

print vor.points
# [[ 0.  0.]
#  [ 0.  1.]
#  [ 0.  2.]
#  [ 1.  0.]
#  [ 1.  1.]
#  [ 1.  2.]
#  [ 2.  0.]
#  [ 2.  1.]
#  [ 2.  2.]]
print vor.point_region
# [1 8 6 3 7 4 2 9 5]
现在我会发现,vor.regions[7]是属于vor.points[4]点的区域。 如何做到这一点


你有一个
区域
你知道,有一个
你不知道,你知道
vor.point\u region[point]==region
。对于单个
区域
,您可以计算出相应的
,如下所示:

point = np.argwhere(vor.point_region == region)
region_point = np.argsort(vor.point_region)
points = region_point[regions-1]
您还可以创建一个
区域\u点
索引数组,从
区域的数组中找出多个
,如下所示:

point = np.argwhere(vor.point_region == region)
region_point = np.argsort(vor.point_region)
points = region_point[regions-1]

也许我不理解您的答案,但当我运行您建议的命令:np.argwhere(vor.point_region==4)时,结果是:array([[5]]),这是不正确的:(这是因为你应该运行
np.argwhere(vor.point\u region==7)
。你知道你所在的区域(7),这就是你所追求的点(4),对吗?因为要从点获得区域,你只需执行
vor.point\u region[4]
。你在哪里有完整的解决方案?有公认的答案?下面的答案对我来说足够清楚了