3
如何確定,使用Qhull,這維諾細胞(指數)是「正確的」(由「現有的頂點」的)沃羅諾伊和勞埃德鬆弛使用Python/SciPy的
我試圖使用進行限制放寬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]。 如何做到這一點?
也許我做不明白你的答案,但當我運行你建議的命令: np.argwhere(vor.point_region == 4) 結果是: 數組([[5]]) 這是不正確的。 :( – Chris
那是因爲你應該運行'np.argwhere(vor.point_region == 7)'。你知道你的區域(7),它是(4)你是後一點,對不對?因爲從獲得區域你只需要做'vor.point_region [4]'。 – Jaime