2012-05-01 12 views
1

경계 조건이 주기적 일 때 두 점 사이의 유클리드 거리를 확인하는 가장 좋은 방법은 무엇입니까? 나는 거리와 거리의 최소값을 취하려고 노력했지만, 프로그램을 구성한 방식으로 인해 이상한 결과가 나왔다고 생각한다. 이 기능에 접근하는 또 다른 좋은 방법이있어 나머지 기능을 재평가하는 대신 채택 할 수 있기를 바라고 있습니다.정기적 인 경계에서 유클리드 거리를 확인하십시오

이것은 파이썬에서 작성되었습니다. 현재 numpy.linalg.norm과 함께 유클리드 거리를 찾고 있지만, 필자가 생각하는 것과 같은 일을하는 SciPy pdist 루틴이 있습니다.

+0

몇 개의 크기가 있습니까? 출력은 "이상한"어떤 방법으로 나타 납니까? –

+3

또한 질문에 만족스럽게 대답 할 때 대답을 "수락"으로 표시하는 습관을 갖춰야합니다. 대답의 왼쪽에있는 눈금 아이콘을 클릭하여 동의합니다. –

+1

"시도해 보았습니다 ...하지만 프로그램을 구성한 방식으로 인해 이상한 결과가 나왔습니다." 어떻게 시도했는지 보여주십시오. 예상 결과와 실제 결과를 보여줍니다. –

답변

3

dx와 range-dx 사이의 크기가 작은 지 각 치수에서 개별적으로 확인해야합니다.

def distance(p1, p2): 
    total = 0 
    for i, (a, b) in enumerate(zip(p1, p2)): 
     delta = abs(b - a) 
     if delta > dimension[i] - delta: 
      delta = dimension[i] - delta 
     total += delta ** 2 
    return total ** 0.5 
+0

포인트가 서로 상자 길이보다 두 개 이상 떨어져 있으면이 작업은 실패합니다. – dbn

+1

@dbw :이 문장은 공간을 n 차원 원환 체로 간주하려는 n 차원 상자 내부의 약 두 점입니다. 그들은 상자의 측면보다 멀리 떨어져있을 수 없습니다. – 6502

+0

사실, 호출 코드가 항상 동일한 상자 내에서 두 점의 좌표를 제공한다는 것을 보장 할 수 있으면 계수는 필요하지 않습니다. – dbn

관련 문제