2017-04-13 16 views
0

8-connectedや26に接続されたセルのようなn次元空間のセルの近傍を取得しようとしていますが、どの次元でもn個のタプルがあります。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 

しかし、これは多くの冗長な近隣を返します。 もっと良い解決策はありますか?

+0

単純な例、2Dまたは3Dの出力を表示できますか?私が複数の次元であなたのコードを試してみると、私は期待していた隣接点のセットを得ています:3次元(元を含む)。 – Prune

答えて

1

itertoolsパッケージには、特にの製品メソッドが必要です。あなたが探しているのは、現在の位置のデカルト積であり、各座標は各方向に1摂動しています。このように、あなたの現在のポイント由来のトリプルのリストがあります:

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

今、あなたは、これらすべてのトリプルの製品を取る各セットを再結合し、そしてあなたの対角線を持っています。

これは必要なものですか?

関連する問題