簡體   English   中英

尋找n維鄰居

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM