寻找 n 维邻居

Finding n-dimensional neighbors

我正在尝试获取 n 维 space 中某个单元格的邻居,类似于 8-connected 或 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

不过这returns很多多余的邻居。 有没有更好的解决方案?

我敢打赌,您所需要的全部都在 itertools 包中,尤其是 product 方法。您正在寻找的是您当前位置的笛卡尔积,每个坐标在每个方向上扰动 1。因此,您将有一个从当前点派生的三元组列表:

diag_coord = [(x-1, x, x+1) for x in point]

现在,你把所有这些三元组的乘积,重新组合每组,你就有了对角线。

这是你需要的吗?