2017-04-13 4 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] 

지금, 당신은 모든 트리플의 제품을 각 세트 재결합을, 당신은 당신의 대각선 있습니다.

그게 필요한가요?