도구스개발

동적 시간 왜곡(DTW) 거리 계산기

길이가 다르거나 속도가 어긋난 두 수열의 거리를 재고 어느 점끼리 대응됐는지 보여줍니다. 같은 자리끼리만 견주는 거리와 나란히 놓아, 시간이 밀린 신호에서 왜 값이 크게 갈리는지 확인할 수 있습니다.

공백이나 쉼표로 나눠 적습니다. 200개까지.

0이면 제약 없음. 대응을 대각선에서 이 칸 안으로 묶습니다.

DTW 거리

1

같은 자리끼리만 견주면 8입니다. 차이가 곧 「늘였다 줄여서 얻은 것」입니다.

수열 길이9개 / 9개
DTW 거리 (제약 없음)1
같은 자리끼리 절댓값 차의 합8
같은 자리끼리 유클리드 거리2.8284
대응 개수10쌍
한 점에 몰린 최대 대응2개
같은 모양인데 시간이 밀리면 값이 크게 갈립니다. 같은 자리끼리만 견주면 8이지만 DTW로는 1입니다. 한 점을 여러 점에 대응시켜 밀린 만큼을 흡수하기 때문입니다 — 아래 표에서 파란 칸이 그 대응입니다.

누적 비용 표와 대응 경로

A \ B001234321
00013610131516
1110136899
2331013445
3663101124
410106310135
313138411013
215159423101
116169545310
0161610778631

각 칸은 「거기까지 오는 데 든 최소 비용」입니다. D[i][j] = |A[i] − B[j]| + min(위, 왼쪽, 대각선)이고 오른쪽 아래 칸이 답입니다. 파란 칸이 그 답을 만든 대응 경로이며, 가로로 이어지면 A의 한 점이 B의 여러 점에 대응된 것입니다.

대응

A0↔B0 A0↔B1 A1↔B2 A2↔B3 A3↔B4 A4↔B5 A5↔B6 A6↔B7 A7↔B8 A8↔B8

편집거리와 표 모양은 닮았지만 「건너뜀」이 없습니다. 편집거리는 글자를 지우거나 넣을 수 있지만 DTW는 모든 점이 반드시 적어도 한 번은 짝지어집니다. 시간을 늘이거나 줄일 뿐 버리지는 않는다는 뜻입니다. text/levenshtein-ops와 나란히 보면 차이가 뚜렷합니다.
「거리」라고 부르지만 거리 공간은 아닙니다. 삼각부등식을 만족하지 않아서, d(A,C)가 d(A,B) + d(B,C)보다 큰 짝이 실제로 있습니다. A = [0,0,2], B = [7,2,0], C = [8,8,0]이면 d(A,C) = 18인데 d(A,B) + d(B,C) = 15입니다. 그래서 거리 공간을 전제로 하는 색인 구조를 그대로 가져다 쓸 수 없습니다.
밴드는 계산을 줄이려고만 두는 것이 아닙니다. 대응을 대각선 가까이로 묶으면 「앞부분이 뒷부분에 통째로 대응되는」 엉뚱한 짝을 막을 수 있습니다. 좁힐수록 선택지가 줄어 거리는 커지거나 같아지고, 0으로 두면 같은 자리끼리만 견주는 것과 같아집니다.

사용 방법

  1. 1두 수열을 공백이나 쉼표로 나눠 적습니다.
  2. 2DTW 거리와 같은 자리끼리 견준 거리를 견줍니다.
  3. 3표에서 어느 점끼리 대응됐는지 확인합니다.
  4. 4밴드 폭을 좁혀 대응을 대각선 가까이로 묶어 봅니다.
  5. 5한쪽 수열을 한두 칸 밀어 넣어 두 거리가 어떻게 갈리는지 봅니다.

자주 묻는 질문

길이가 다르거나 속도가 어긋난 두 수열을 늘였다 줄여서 맞춘 뒤 거리를 재는 방법입니다. 같은 자리끼리만 견주는 거리와 달리 한 점을 여러 점에 대응시킬 수 있어서, 「모양이 같은가」를 재는 데 훨씬 가깝습니다. 음성 인식과 몸짓 인식에서 오래 쓰였습니다.

유클리드 거리는 i번째끼리만 견주므로 길이가 같아야 하고, 모양이 같아도 시간이 한 칸 밀리면 값이 크게 벌어집니다. DTW는 대응을 자유롭게 고를 수 있어 밀린 만큼을 흡수합니다. 이 도구의 기본 예제에서 같은 자리끼리 견주면 8, DTW로는 1이 나옵니다.

표를 채웁니다. D[i][j] = |a[i] − b[j]| + min(위, 왼쪽, 대각선)이고, 오른쪽 아래 칸이 답입니다. 편집거리 표와 닮았지만 「건너뜀」이 없다는 점이 다릅니다. DTW에서는 모든 점이 반드시 적어도 한 번은 짝지어집니다 — 시간을 늘이거나 줄일 뿐 버리지는 않습니다.

아닙니다. 삼각부등식을 만족하지 않아서, d(A,C)가 d(A,B) + d(B,C)보다 큰 짝이 실제로 있습니다. 그래서 거리 공간을 전제로 하는 색인 구조나 군집화 알고리즘을 그대로 가져다 쓸 수 없습니다. 「거리」라는 이름이 붙었지만 성질은 다릅니다.

대응을 대각선에서 일정 칸 안으로 묶는 제약입니다. 계산이 줄기도 하지만 그보다도 엉뚱하게 먼 대응을 막는 것이 목적입니다. 밴드를 좁히면 선택지가 줄어 거리가 커지거나 같아지고, 밴드가 0이면 같은 자리끼리만 견주는 것과 같아집니다.

표를 채우는 모양은 닮았지만 다루는 것이 다릅니다. 편집거리는 글자를 넣거나 지울 수 있고 그 횟수를 셉니다. DTW는 값의 차이를 더하고, 어떤 점도 버리지 않습니다. 편집거리는 「몇 번 고쳐야 같아지나」이고 DTW는 「늘였다 줄이면 얼마나 닮았나」입니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력한 수열은 이 기기에만 남습니다.

알아두면 좋은 점

  • 정답지는 무식한 방법입니다. 가능한 모든 대응 경로를 훑어 가장 싼 것을 찾은 값과, 표를 채워 얻은 값이 400가지 짝에서 모두 같은 것을 확인했습니다. 원리가 겹치지 않는 두 방법이라 서로를 검산합니다.
  • 경로 자체도 검사합니다. (0,0)에서 시작해 끝 칸까지 이어지는지, 한 걸음이 오른쪽·아래·대각선 중 하나인지, 경로의 비용을 더하면 거리와 같은지, 모든 점이 적어도 한 번은 짝지어지는지를 봅니다.
  • 같은 수열끼리는 0이고 dtw(a,b) = dtw(b,a)인 것도 300가지 짝에서 확인했습니다.
  • 삼각부등식을 만족하지 않는다는 것을 말로만 적지 않고 반례를 박아 두었습니다. A = [0,0,2], B = [7,2,0], C = [8,8,0]에서 d(A,C) = 18인데 d(A,B) + d(B,C) = 15입니다.
  • 밴드를 좁히면 거리가 커지거나 같은 것, 밴드가 0이면 같은 자리끼리 견준 값과 같아지는 것을 검사합니다.
  • 길이 차이보다 좁은 밴드는 길이 차이만큼으로 자동으로 넓힙니다. 그러지 않으면 두 수열을 아예 이을 수 없어 무한이 됩니다.
  • 거리는 값의 차이를 절댓값으로 더한 것입니다. 제곱 합을 쓰는 구현도 있으므로 다른 도구와 값을 견줄 때 어느 잣대인지 확인해야 합니다.
  • 수열은 각각 200개까지 다룹니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.