거리 함수
거리 함수 (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와 계산이 빨라지지만 정확도가 떨어지고, 많이 쓰면 성능을 희생하고 정확도가 높아져요.UIntused_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)
반환 값 (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)
예제 (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