Comment déterminer, à l'aide Qhull, qui cellules VORONOI (par indice) sont « bon » (en « sommets existants »)relaxation voronoi et lloyd en utilisant python/scipy
Je suis en train d'effectuer un relâchement des contraintes à l'aide LLoyds algorithme et entrée générée par scipy.spatial Voronoi (qui est un wrapper pour Qhull).
En termes de code, il ressemble à:
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
Le graphique de sortie généré par le code semble correct (voir ci-dessous) mais les données dans la structure vor ne suffit pas pour effectuer la relaxation Lloyds. C'est parce que je devrais seulement déplacer les points qui sont à l'intérieur des cellules de voronoï valides (# 4 dans l'image). L'autre devrait être laissé tel quel. Qhull désordre l'ordre des points/régions, donc je ne peux pas estimer quelle région appartient à quel point.
Voici l'illustration du problème:
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]
Maintenant, je dois trouver une certaine façon que vor.regions [7] est une région qui appartient au point vor.points [4]. Comment y parvenir?
Peut-être que je l'ai fait comprends pas votre réponse, mais quand je lance la commande proposée par vous: np.argwhere (vor.point_region == 4) le résultat est: array ([[5]]) ce qui est inexact. :( – Chris
C'est parce que vous devriez exécuter 'np.argwhere (vor.point_region == 7)'. Vous connaissez votre région (7), c'est le point (4) que vous recherchez, n'est-ce pas? le point que vous faites simplement 'vor.point_region [4]'. – Jaime