거리 함수

거리 함수 (Distance functions)

벡터 사이의 거리(노름)와 유사도를 계산하는 함수 모음이에요. L1/L2/무한대/Lp 노름, 코사인 거리, 점곱 등을 지원해요.

출처: 문서

본문

L1Distance

L1 공간(1-노름, 택시 기하학 거리)에서 두 점(벡터의 요소가 좌표) 사이의 거리를 계산해요.

구문 (Syntax)

L1Distance(vector1, vector2)

별칭 (Aliases): distanceL1

인자 (Arguments)

반환 값 (Returned value)

1-노름 거리. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64를 반환해요. Tuple 입력의 경우 반환 타입은 요소별 연산의 산술 결과 타입을 따르고 정수 타입은 보존돼요. (U)Int* 또는 Float*

예제 (Examples)

SELECT L1Distance((1, 2), (2, 3))  -- 2

L1Norm

벡터의 절댓값 요소의 합을 계산해요.

구문 (Syntax)

L1Norm(vector)

별칭 (Aliases): normL1

반환 값 (Returned value)

L1-노름 또는 택시 기하학 거리. UInt*, Float* 또는 Decimal

예제 (Examples)

SELECT L1Norm((1, 2))  -- 3

L1Normalize

L1 공간(택시 기하학)에서 주어진 벡터의 단위 벡터를 계산해요.

구문 (Syntax)

L1Normalize(vector)

별칭 (Aliases): normalizeL1

반환 값 (Returned value)

단위 벡터. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Array(Float32), 그 외에는 Array(Float64)를 반환해요. Tuple 입력의 경우 항상 Tuple(Float64)를 반환해요. Tuple(Float64), Array(Float32) 또는 Array(Float64)

예제 (Examples)

SELECT L1Normalize((1, 2))  -- (0.3333333333333333,0.6666666666666666)

L2Distance

유클리드 공간(유클리드 거리)에서 두 점 사이의 거리를 계산해요.

구문 (Syntax)

L2Distance(vector1, vector2)

별칭 (Aliases): distanceL2

반환 값 (Returned value)

2-노름 거리. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64. Tuple 입력의 경우 항상 Float64. Float*

예제 (Examples)

SELECT L2Distance((1, 2), (2, 3))  -- 1.4142135623730951

L2DistanceTransposed

유클리드 공간에서 두 점 사이의 근사 거리를 계산해요.

구문 (Syntax)

L2DistanceTransposed(vector1, vector2, p[, used_dims])

별칭 (Aliases): distanceL2Transposed

인자 (Arguments)

  • vectors — 벡터. QBit(T, UInt64[, UInt64])
  • reference — 참조 벡터. Array(T)
  • p — 거리 계산에 사용할 각 벡터 요소의 비트 수(1부터 요소 비트 너비까지). 양자화 수준이 정밀도-속도 트레이드오프를 제어해요. 비트를 적게 쓰면 I/O와 계산이 빨라지지만 정확도가 떨어지고, 많이 쓰면 성능을 희생하고 정확도가 높아져요. UInt
  • used_dims — 선택 사항. 축소 차원(Matryoshka) 검색을 위해 읽을 앞쪽 차원의 수. QBit 스트라이드의 배수여야 하고 그 차원을 초과하지 않아야 하며, 참조 벡터는 최소한 이만큼의 요소를 가져야 해요(추가 뒤쪽 요소는 무시돼요). 이 차원들을 덮는 스트라이드 그룹만 읽어요. UInt

반환 값 (Returned value)

근사 2-노름 거리. 항상 Float64를 반환해요. Float64

L2DistanceTransposedQuantized

quantizeBFloat16ToInt8 코드의 QBit(Int8)(즉석에서 역양자화)과 참조 벡터 사이의 근사 유클리드 거리를 계산해요. Float 참조(쿼리) 벡터는 Float32 정밀도로 직접 비교돼요 — 역양자화 코드의 재구성 정밀도라서, Float64 쿼리는 Float32로 좁혀지고 BFloat16 쿼리는 정확히 그만큼 넓어져요(비대칭 거리 계산). Array(Int8) 참조는 그 자체가 quantizeBFloat16ToInt8 코드로 취급되어 재구성 수준으로 역양자화돼요. p는 저장된 QBit 코드만 자르고, Array(Int8) 참조는 완전한 쿼리이므로 항상 전체 8비트 정밀도로 재구성된다는 점에 유의하세요. 따라서 양자화-대-양자화 대칭 거리는 p = 8에서만 성립돼요(p < 8에서는 저장된 쪽만 더 거친 정밀도로 읽혀요). 값은 양자화 전의 값과 같은 공간(즉 같은 무작위 회전과 스케일링 후)에 있어야 하는데, 이는 호출자의 책임이에요. 코사인 거리는 스케일 불변이지만 점곱과 L2 거리는 그렇지 않아요.

구문 (Syntax)

L2DistanceTransposedQuantized(vectors, reference, p[, used_dims])

반환 값 (Returned value)

근사 2-노름 거리. 항상 Float64. Float64

L2Norm

벡터 요소 제곱의 합의 제곱근을 계산해요.

구문 (Syntax)

L2Norm(vector)

별칭 (Aliases): normL2

반환 값 (Returned value)

L2-노름 또는 유클리드 거리. UInt* 또는 Float*

예제 (Examples)

SELECT L2Norm((1, 2))  -- 2.23606797749979

L2Normalize

유클리드 공간에서 주어진 벡터의 단위 벡터를 계산해요.

구문 (Syntax)

L2Normalize(vector)

별칭 (Aliases): normalizeL2

반환 값 (Returned value)

단위 벡터. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Array(Float32), 그 외에는 Array(Float64). Tuple 입력의 경우 항상 Tuple(Float64). Tuple(Float64), Array(Float32) 또는 Array(Float64)

예제 (Examples)

SELECT L2Normalize((3, 4))  -- (0.6,0.8)

L2SquaredDistance

두 벡터의 대응 요소 간 차이의 제곱 합을 계산해요.

구문 (Syntax)

L2SquaredDistance(vector1, vector2)

별칭 (Aliases): distanceL2Squared

반환 값 (Returned value)

두 벡터의 대응 요소 간 차이 제곱의 합. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64. Tuple 입력의 경우 반환 타입은 요소별 연산의 산술 결과 타입을 따르고 정수 타입은 보존돼요. (U)Int* 또는 Float*

예제 (Examples)

SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])  -- 14

L2SquaredNorm

벡터 요소의 제곱 합의 제곱근(L2Norm)의 제곱을 계산해요.

구문 (Syntax)

L2SquaredNorm(vector)

별칭 (Aliases): normL2Squared

반환 값 (Returned value)

L2-노름의 제곱. UInt*, Float* 또는 Decimal

예제 (Examples)

SELECT L2SquaredNorm((1, 2))  -- 5

LinfDistance

L_{inf} 공간(최대 노름)에서 두 점 사이의 거리를 계산해요.

구문 (Syntax)

LinfDistance(vector1, vector2)

별칭 (Aliases): distanceLinf

반환 값 (Returned value)

무한대-노름 거리. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64. Tuple 입력의 경우 항상 Float64. Float*

예제 (Examples)

SELECT LinfDistance((1, 2), (2, 3))  -- 1

LinfNorm

벡터의 절댓값 요소의 최대값을 계산해요.

구문 (Syntax)

LinfNorm(vector)

별칭 (Aliases): normLinf

반환 값 (Returned value)

Linf-노름 또는 최대 절댓값. Float64

예제 (Examples)

SELECT LinfNorm((1, -2))  -- 2

LinfNormalize

L_{inf} 공간에서 주어진 벡터의 단위 벡터를 계산해요.

구문 (Syntax)

LinfNormalize(vector)

별칭 (Aliases): normalizeLinf

반환 값 (Returned value)

단위 벡터. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Array(Float32), 그 외에는 Array(Float64). Tuple 입력의 경우 항상 Tuple(Float64).

예제 (Examples)

SELECT LinfNormalize((3, 4))  -- (0.75,1)

LpDistance

Lp 공간(p-노름 거리)에서 두 점 사이의 거리를 계산해요.

구문 (Syntax)

LpDistance(vector1, vector2, p)

별칭 (Aliases): distanceLp

인자 (Arguments)

  • vector1 — 첫 번째 벡터.
  • vector2 — 두 번째 벡터.
  • p — 거듭제곱. 가능한 값: [1; inf)의 실수. UInt*, Int* 또는 Float*

반환 값 (Returned value)

p-노름 거리. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64. Tuple 입력의 경우 항상 Float64.

예제 (Examples)

SELECT LpDistance((1, 2), (2, 3), 3)  -- 1.2599210498948732

LpNorm

벡터의 p-노름(요소 절댓값의 p 제곱 합의 p 제곱근)을 계산해요. 특별한 경우:

  • p=1일 때 L1Norm(맨해튼 거리)과 같아요.
  • p=2일 때 L2Norm(유클리드 거리)과 같아요.
  • p 값은 1 이상의 유한한 숫자여야 해요. 최대 노름(p→∞의 극한)에는 LinfNorm을 사용하세요.

구문 (Syntax)

LpNorm(vector, p)

별칭 (Aliases): normLp

반환 값 (Returned value)

Lp-노름. Float64

예제 (Examples)

SELECT LpNorm((1, -2), 2)  -- 2.23606797749979

LpNormalize

Lp 공간에서 주어진 벡터의 단위 벡터를 계산해요.

구문 (Syntax)

LpNormalize(vector, p)

별칭 (Aliases): normalizeLp

반환 값 (Returned value)

단위 벡터. Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Array(Float32), 그 외에는 Array(Float64). Tuple 입력의 경우 항상 Tuple(Float64).

예제 (Examples)

SELECT LpNormalize((3, 4), 5)  -- (0.7187302630182624,0.9583070173576831)

cosineDistance

두 벡터 사이의 코사인 거리를 계산해요. 반환 값이 작을수록 두 벡터가 더 유사해요.

구문 (Syntax)

cosineDistance(vector1, vector2)

별칭 (Aliases): distanceCosine

반환 값 (Returned value)

코사인 거리(1에서 코사인 유사도를 뺀 값). Array 입력의 경우 요소 타입의 최하위 공통 슈퍼타입이 Float32 또는 BFloat16이면 Float32, 그 외에는 Float64. Tuple 입력의 경우 항상 Float64.

예제 (Examples)

SELECT cosineDistance((1, 2), (2, 3));  -- 0.007722123286332261

cosineDistanceTransposed

두 점 사이의 근사 코사인 거리를 계산해요. 반환 값이 작을수록 두 벡터가 더 유사해요.

구문 (Syntax)

cosineDistanceTransposed(vector1, vector2, p[, used_dims])

별칭 (Aliases): distanceCosineTransposed

반환 값 (Returned value)

근사 코사인 거리(1에서 코사인 유사도를 뺀 값). 항상 Float64를 반환해요. Float64

cosineDistanceTransposedQuantized

quantizeBFloat16ToInt8 코드의 QBit(Int8)(즉석에서 역양자화)과 참조 벡터 사이의 근사 코사인 거리를 계산해요. 반환 값이 작을수록 벡터가 더 유사해요.

구문 (Syntax)

cosineDistanceTransposedQuantized(vectors, reference, p[, used_dims])

반환 값 (Returned value)

근사 코사인 거리(1에서 코사인 유사도를 뺀 값). 항상 Float64. Float64

dotProductTransposed

두 벡터의 근사 점곱(내적)을 계산해요. 거리 함수와 달리 이는 유사도 측정이에요: 반환 값이 클수록 벡터가 더 유사해요.

구문 (Syntax)

dotProductTransposed(vector1, vector2, p[, used_dims])

별칭 (Aliases): scalarProductTransposed

반환 값 (Returned value)

두 벡터의 근사 점곱. 항상 Float64. Float64

dotProductTransposedQuantized

quantizeBFloat16ToInt8 코드의 QBit(Int8)(즉석에서 역양자화)과 참조 벡터 사이의 근사 점곱(내적)을 계산해요. 이는 유사도 측정이에요: 반환 값이 클수록 벡터가 더 유사해요.

구문 (Syntax)

dotProductTransposedQuantized(vectors, reference, p[, used_dims])

반환 값 (Returned value)

두 벡터의 근사 점곱. 항상 Float64. Float64

더 알아보기 (Learn more)