본문으로 바로가기
본문으로 바로가기

거리 함수

L1Distance

도입 버전: v21.11.0

L1 공간(1-노름, 택시 기하학 거리)에서 두 점 사이의 거리를 계산합니다. 여기서 벡터의 원소들은 해당 공간에서의 좌표입니다.

구문

L1Distance(vector1, vector2)

별칭: distanceL1

인수

반환 값

1-노름 거리 값을 반환합니다. Array 입력의 경우, 요소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를 반환하고, 그렇지 않으면 Float64를 반환합니다. Tuple 입력의 경우, 반환 타입은 요소별 연산의 산술 결과 타입을 따릅니다(정수 타입은 유지됩니다). (U)Int* 또는 Float*

예시

기본 사용법

SELECT L1Distance((1, 2), (2, 3))
┌─L1Distance((1, 2), (2, 3))─┐
│                          2 │
└────────────────────────────┘

L1Norm

도입 버전: v21.11.0

벡터의 각 원소의 절댓값 합을 계산합니다.

구문

L1Norm(vector)

별칭: normL1

인수

  • vector — 숫자 값으로 이루어진 벡터 또는 튜플. Array(T) 또는 Tuple(T)

반환 값

L1-노름, 즉 택시 기하학(taxicab geometry)에서의 거리를 반환합니다. UInt* 또는 Float* 또는 Decimal

예시

기본 사용법

SELECT L1Norm((1, 2))
┌─L1Norm((1, 2))─┐
│              3 │
└────────────────┘

L1Normalize

도입된 버전: v21.11.0

주어진 벡터(튜플의 각 요소는 좌표임)의 단위 벡터를 L1 공간(택시 기하학)에서 계산합니다.

구문

L1Normalize(tuple)

별칭: normalizeL1

인수

  • tuple — 숫자 값의 튜플입니다. Tuple(T)

반환 값

단위 벡터를 반환합니다. Tuple(Float64)

예시

기본 사용법

SELECT L1Normalize((1, 2))
┌─L1Normalize((1, 2))─────────────────────┐
│ (0.3333333333333333,0.6666666666666666) │
└─────────────────────────────────────────┘

L2Distance

도입 버전: v21.11.0

유클리드 공간에서 두 점 사이의 거리(유클리드 거리)를 계산합니다(벡터의 원소는 좌표입니다).

구문

L2Distance(vector1, vector2)

별칭: distanceL2

인수

반환 값

2-노름(L2-norm) 거리를 반환합니다. Array 입력에서는 원소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를 반환하고, 그렇지 않으면 Float64를 반환합니다. Tuple 입력에서는 항상 Float64를 반환합니다. Float*

예시

기본 사용법

SELECT L2Distance((1, 2), (2, 3))
┌─L2Distance((1, 2), (2, 3))─┐
│         1.4142135623730951 │
└────────────────────────────┘

L2DistanceTransposed

도입 버전: v25.10.0

유클리드 공간에서 두 점(벡터의 값이 좌표를 의미함) 사이의 근사 거리를 계산합니다(유클리드 거리).

구문

L2DistanceTransposed(vector1, vector2, p)

별칭: distanceL2Transposed

인수

  • vectors — 벡터. QBit(T, UInt64)
  • reference — 기준 벡터. Array(T)
  • p — 거리 계산에 사용할 각 벡터 요소의 비트 수(1부터 요소 비트 폭까지). 양자화 수준은 정밀도와 속도 간의 절충을 결정합니다. 더 적은 비트를 사용하면 I/O와 계산은 더 빨라지지만 정확도가 떨어지고, 더 많은 비트를 사용하면 성능 저하를 감수하는 대신 정확도가 높아집니다. UInt

반환 값

근사적인 2-노름(2-norm) 거리를 반환합니다. 항상 Float64를 반환합니다. Float64

예시

기본 사용법

CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT L2DistanceTransposed(vec, array(1, 2), 16) FROM qbit;
┌─L2DistanceTransposed([0, 1], [1, 2], 16)─┐
│                       1.4142135623730951 │
└──────────────────────────────────────────┘

L2Norm

도입 버전: v21.11.0

벡터 요소 각각을 제곱한 값의 합에 대한 제곱근을 계산합니다.

구문

L2Norm(vector)

별칭: normL2

인수

  • vector — 숫자 값으로 구성된 벡터 또는 튜플입니다. Tuple(T) 또는 Array(T)

반환 값

L2-노름 또는 유클리드 거리를 반환합니다. UInt* 또는 Float*

예시

기본 사용법

SELECT L2Norm((1, 2))
┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘

L2Normalize

도입 버전: v21.11.0

주어진 벡터(튜플의 요소가 좌표인 경우)의 유클리드 공간에서의 단위 벡터를 계산합니다(유클리드 거리(Euclidean distance)를 사용합니다).

구문

L2Normalize(tuple)

별칭: normalizeL2

인수

  • tuple — 숫자 값으로 이루어진 튜플입니다. Tuple(T)

반환 값

단위 벡터를 반환합니다. Tuple(Float64)

예시

기본 사용법

SELECT L2Normalize((3, 4))
┌─L2Normalize((3, 4))─┐
│ (0.6,0.8)           │
└─────────────────────┘

L2SquaredDistance

도입 버전: v22.7.0

두 벡터에서 대응하는 각 원소의 차이를 제곱한 값의 합을 계산합니다.

구문

L2SquaredDistance(vector1, vector2)

별칭: distanceL2Squared

인수

반환 값

두 벡터에서 서로 대응하는 원소들의 차를 제곱한 값의 합을 반환합니다. Array 입력의 경우, 원소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를 반환하고, 그렇지 않으면 Float64를 반환합니다. Tuple 입력의 경우, 반환 타입은 원소별 연산의 산술 결과 타입을 따릅니다(정수 타입은 유지됨). (U)Int* 또는 Float*

예시

기본 사용 예

SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])
┌─L2SquaredDis⋯ [0, 0, 0])─┐
│                       14 │
└──────────────────────────┘

L2SquaredNorm

도입된 버전: v22.7.0

벡터 요소 제곱합의 제곱근( L2Norm )을 제곱한 값을 계산합니다.

구문

L2SquaredNorm(vector)

별칭: normL2Squared

인수

  • vector — 숫자 값으로 이루어진 벡터 또는 튜플입니다. Array(T) 또는 Tuple(T)

반환 값

L2-노름의 제곱을 반환합니다. UInt* 또는 Float* 또는 Decimal

예제

기본 사용법

SELECT L2SquaredNorm((1, 2))
┌─L2SquaredNorm((1, 2))─┐
│                     5 │
└───────────────────────┘

LinfDistance

도입 버전: v21.11.0

두 점(벡터의 각 원소는 좌표) 사이의 거리를 L_{inf} 공간(최대 노름)에서 계산합니다.

구문

LinfDistance(vector1, vector2)

별칭: distanceLinf

인수

반환 값

Infinity-norm(무한 노름) 거리 값을 반환합니다. Array 입력의 경우, 원소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를 반환하고, 그렇지 않으면 Float64를 반환합니다. Tuple 입력의 경우 항상 Float64를 반환합니다. Float*

예시

기본 사용법

SELECT LinfDistance((1, 2), (2, 3))
┌─LinfDistance((1, 2), (2, 3))─┐
│                            1 │
└──────────────────────────────┘

LinfNorm

도입 버전: v21.11.0

벡터 요소의 절댓값 중 최댓값을 계산합니다.

구문

LinfNorm(vector)

별칭: normLinf

인수

  • vector — 숫자 값으로 구성된 벡터 또는 튜플. Array(T) 또는 Tuple(T)

반환 값

Linf-노름 또는 최대 절댓값을 반환합니다. Float64

예제

기본 사용법

SELECT LinfNorm((1, -2))
┌─LinfNorm((1, -2))─┐
│                 2 │
└───────────────────┘

LinfNormalize

도입된 버전: v21.11.0

주어진 벡터(튜플의 요소가 좌표)를 L_{inf} 공간에서의 단위 벡터로 정규화합니다(최대 노름(maximum norm)을 사용하여 계산합니다).

구문

LinfNormalize(tuple)

별칭: normalizeLinf

인수

  • tuple — 숫자 값으로 구성된 튜플입니다. Tuple(T)

반환 값

단위 벡터를 반환합니다. Tuple(Float64)

예제

기본 사용법

SELECT LinfNormalize((3, 4))
┌─LinfNormalize((3, 4))─┐
│ (0.75,1)              │
└───────────────────────┘

LpDistance

도입 버전: v21.11.0

두 점(벡터의 원소를 좌표로 가정)을 Lp 공간에서의 거리(p-노름 거리)로 계산합니다.

구문

LpDistance(vector1, vector2, p)

별칭: distanceLp

인수

반환 값

p-노름 거리(p-norm distance)를 반환합니다. Array 입력의 경우, 원소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를 반환하고, 그렇지 않으면 Float64를 반환합니다. Tuple 입력의 경우, 항상 Float64를 반환합니다. Float*

예시

기본 사용법

SELECT LpDistance((1, 2), (2, 3), 3)
┌─LpDistance((1, 2), (2, 3), 3)─┐
│            1.2599210498948732 │
└───────────────────────────────┘

LpNorm

도입 버전: v21.11.0

벡터의 p-노름을 계산합니다. 이는 각 원소의 절댓값을 p제곱한 뒤 모두 더한 값의 p제곱근입니다.

특수한 경우:

  • p=1이면 L1Norm(Manhattan distance)과 동일합니다.
  • p=2이면 L2Norm(Euclidean distance)과 동일합니다.
  • p=∞이면 LinfNorm(maximum norm)과 동일합니다.

구문

LpNorm(vector, p)

별칭: normLp

인수

  • vector — 숫자 값으로 이루어진 벡터 또는 튜플. Tuple(T) 또는 Array(T)
  • p — 지수 값. 사용할 수 있는 값은 [1; inf) 범위의 실수입니다. UInt* 또는 Float*

반환 값

Lp-노름(Lp-norm)을 반환합니다. Float64

예시

기본 사용법

SELECT LpNorm((1, -2), 2)
┌─LpNorm((1, -2), 2)─┐
│   2.23606797749979 │
└────────────────────┘

LpNormalize

도입된 버전: v21.11.0

Lp 공간에서 p-노름을 사용하여 (튜플의 요소를 좌표로 하는) 주어진 벡터의 단위 벡터를 계산합니다.

구문

LpNormalize(tuple, p)

별칭(Aliases): normalizeLp

인수(Arguments)

  • tuple — 숫자 값들로 이루어진 튜플입니다. Tuple(T)
  • p — 거듭제곱을 나타내는 값입니다. 가능한 값은 [1; inf) 구간의 모든 수입니다. UInt* 또는 Float*

반환 값(Returned value)

단위 벡터를 반환합니다. Tuple(Float64)

예시(Examples)

사용 예(Usage example)

SELECT LpNormalize((3, 4), 5)
┌─LpNormalize((3, 4), 5)──────────────────┐
│ (0.7187302630182624,0.9583070173576831) │
└─────────────────────────────────────────┘

cosineDistance

도입 버전: v21.11.0

두 벡터(튜플의 원소가 좌표)를 대상으로 코사인 거리를 계산합니다. 반환 값이 작을수록 두 벡터가 더 유사합니다.

구문

cosineDistance(vector1, vector2)

별칭(Aliases): distanceCosine

인수

반환 값(Returned value)

코사인 거리(코사인 유사도에서 1을 뺀 값)를 반환합니다. Array 입력에서는 원소 타입의 최소 공통 상위 타입이 Float32 또는 BFloat16이면 Float32를, 그 외에는 Float64를 반환합니다. Tuple 입력에서는 항상 Float64를 반환합니다. Float*

예시

사용법

SELECT cosineDistance((1, 2), (2, 3));
┌─cosineDistance((1, 2), (2, 3))─┐
│           0.007722123286332261 │
└────────────────────────────────┘

cosineDistanceTransposed

도입 버전: v26.1.0

두 점(벡터의 값은 좌표임) 사이의 코사인 거리를 근사적으로 계산합니다. 반환 값이 작을수록 벡터가 더 유사합니다.

구문

cosineDistanceTransposed(vector1, vector2, p)

별칭: distanceCosineTransposed

인수

  • vectors — 벡터. QBit(T, UInt64)
  • reference — 기준 벡터. Array(T)
  • p — 거리 계산에 사용할 각 벡터 요소의 비트 수(1부터 요소 비트 폭까지). 양자화 수준은 정밀도와 속도 간의 트레이드오프를 제어합니다. 더 적은 비트를 사용하면 I/O 및 계산은 더 빨라지지만 정확도는 낮아지고, 더 많은 비트를 사용하면 성능이 떨어지는 대신 정확도가 높아집니다. UInt

반환 값

근사 코사인 거리(코사인 유사도에서 1을 뺀 값)를 반환합니다. 항상 Float64를 반환합니다. Float64

예시

기본 사용법

CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT cosineDistanceTransposed(vec, array(1, 2), 16) FROM qbit;
┌─cosineDistanceTransposed([0, 1], [1, 2], 16)─┐
│                          0.10557281085638826 │
└──────────────────────────────────────────────┘