[英]Finding n-dimensional neighbors
我試圖在n維空間中獲得一個單元的鄰居,類似於8個連接或26個連接的單元,但是在任何維度上都提供了一個n元組。
直接相鄰的鄰居很容易,在任何維度上僅+ 1 / -1。 我遇到困難的部分是對角線,在這里我可以有任意數量的坐標相差1。
我編寫了一個針對每個子維度重復出現的函數,並生成所有+/-組合:
def point_neighbors_recursive(point):
neighbors = []
# 1-dimension
if len(point) == 1:
neighbors.append([point[0] - 1]) # left
neighbors.append([point[0]]) # current
neighbors.append([point[0] + 1]) # right
return neighbors
# n-dimensional
for sub_dimension in point_neighbors_recursion(point[1:]):
neighbors.append([point[0] - 1] + sub_dimension) # left
neighbors.append([point[0]] + sub_dimension) # center
neighbors.append([point[0] + 1] + sub_dimension) # right
return neighbors
但是,這會返回很多冗余鄰居。 有更好的解決方案嗎?
我敢打賭,您需要的只是在itertools軟件包中,尤其是product方法。 您正在尋找的是您當前位置的笛卡爾積,每個坐標在每個方向上都被1擾動。 因此,您將獲得一個從當前點得出的三元組列表:
diag_coord = [(x-1, x, x+1) for x in point]
現在,您獲取所有這些三元組的乘積,重新組合每組,就得到了對角線。
那是你需要的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.