> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق دوال المسافة

# دوال المسافة

{/*AUTOGENERATED_START*/}

<div id="L1Distance">
  ## L1Distance
</div>

أُضيف في: v21.11.0

يحسب المسافة بين نقطتين (حيث تمثل عناصر المتجهات الإحداثيات) في فضاء `L1` (المعيار 1 (مسافة [هندسة مانهاتن](https://en.wikipedia.org/wiki/Taxicab_geometry))).

**البنية**

```sql theme={null}
L1Distance(vector1, vector2)
```

**الأسماء البديلة**: `distanceL1`

**الوسائط**

* `vector1` — المتجه الأول. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — المتجه الثاني. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المعادة**

يعيد مسافة معيار L1. بالنسبة إلى مدخلات `Array`، يعيد `Float32` إذا كان النوع الفائق المشترك الأدنى لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فيعيد `Float64`. أما بالنسبة إلى مدخلات `Tuple`، فإن نوع الإرجاع يتبع نوع الناتج الحسابي للعمليات على مستوى العناصر (مع الحفاظ على أنواع الأعداد الصحيحة). [`(U)Int*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L1Distance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─L1Distance((1, 2), (2, 3))─┐
│                          2 │
└────────────────────────────┘
```

<div id="L1Norm">
  ## L1Norm
</div>

أُضيفت في: v21.11.0

تحسب مجموع القيم المطلقة لعناصر المتجه.

**الصيغة**

```sql theme={null}
L1Norm(vector)
```

**الأسماء البديلة**: `normL1`

**الوسيطات**

* `vector` — متجه أو `Tuple` من القيم الرقمية. [`Array(T)`](/docs/ar/reference/data-types/array) أو [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المُعادة**

تُرجع معيار L1 أو مسافة [هندسة مانهاتن](https://en.wikipedia.org/wiki/Taxicab_geometry). [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float) أو [`Decimal`](/docs/ar/reference/data-types/decimal)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L1Norm((1, 2))
```

```response title=Response theme={null}
┌─L1Norm((1, 2))─┐
│              3 │
└────────────────┘
```

<div id="L1Normalize">
  ## L1Normalize
</div>

أُضيفت في: v21.11.0

تحسب متجه الوحدة لمتجه معيّن (عناصر الـ Tuple هي الإحداثيات) في فضاء `L1` ([هندسة مانهاتن](https://en.wikipedia.org/wiki/Taxicab_geometry)).

**البنية**

```sql theme={null}
L1Normalize(tuple)
```

**الأسماء المستعارة**: `normalizeL1`

**الوسائط**

* `tuple` — Tuple من القيم العددية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المُعادة**

تُرجع متجه الوحدة. [`Tuple(Float64)`](/docs/ar/reference/data-types/tuple)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L1Normalize((1, 2))
```

```response title=Response theme={null}
┌─L1Normalize((1, 2))─────────────────────┐
│ (0.3333333333333333,0.6666666666666666) │
└─────────────────────────────────────────┘
```

<div id="L2Distance">
  ## L2Distance
</div>

أُضيفت في: v21.11.0

تحسب المسافة بين نقطتين (تمثل عناصر المتجهات الإحداثيات) في الفضاء الإقليدي ([المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance)).

**الصيغة**

```sql theme={null}
L2Distance(vector1, vector2)
```

**الأسماء المستعارة**: `distanceL2`

**الوسائط**

* `vector1` — المتجه الأول. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — المتجه الثاني. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المُعادة**

تُرجع مسافة معيار L2. بالنسبة إلى مدخلات `Array`، تُرجع `Float32` إذا كان النوع الفائق المشترك الأدنى لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فتُرجع `Float64`. أما بالنسبة إلى مدخلات `Tuple`، فتُرجع دائمًا `Float64`. [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L2Distance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─L2Distance((1, 2), (2, 3))─┐
│         1.4142135623730951 │
└────────────────────────────┘
```

<div id="L2DistanceTransposed">
  ## L2DistanceTransposed
</div>

أُضيف في: v25.10.0

يحسب المسافة التقريبية بين نقطتين (تمثل قيم المتجهات الإحداثيات) في الفضاء الإقليدي ([المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance)).

**الصيغة**

```sql theme={null}
L2DistanceTransposed(vector1, vector2, p[, used_dims])
```

**الأسماء البديلة**: `distanceL2Transposed`

**المعاملات**

* `vectors` — المتجهات. [`QBit(T, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي. [`Array(T)`](/docs/ar/reference/data-types/array)
* `p` — عدد البِتّات من كل عنصر في المتجه التي ستُستخدم في حساب المسافة (من 1 إلى عرض البِتّ للعنصر). يتحكم مستوى التكميم في موازنة بين الدقة والسرعة. يؤدّي استخدام عدد أقل من البِتّات إلى تسريع عمليات IO والحسابات مع تقليل الدقة، بينما يؤدّي استخدام عدد أكبر من البِتّات إلى زيادة الدقة على حساب الأداء. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى المطلوب قراءتها لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي `stride`. يجب أن يكون مضاعفًا لـ `stride` الخاص بـ `QBit` وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (ويُتجاهل أي عناصر إضافية لاحقة). لا تُقرأ إلا مجموعات `stride` التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المعادة**

يعيد المسافة التقريبية لمعيار 2. ويُرجع دائمًا `Float64`. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─L2DistanceTransposed([0, 1], [1, 2], 16)─┐
│                       1.3922918381215914 │
└──────────────────────────────────────────┘
```

<div id="L2DistanceTransposedQuantized">
  ## L2DistanceTransposedQuantized
</div>

أُضيف في: v26.7.0

يحسب [المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance) التقريبية بين `QBit(Int8)` من رموز `quantizeBFloat16ToInt8` (تُفكّ تكميمها آنيًا) ومتجه مرجعي. يُقارَن متجه مرجعي (استعلام) من النوع `Float` مباشرةً بدقة `Float32` -- وهي دقة إعادة بناء الرموز بعد فك تكميمها، لذا يُحوَّل استعلام `Float64` إلى `Float32`، بينما يُوسَّع استعلام `BFloat16` إليها بدقة تامة (أي إن حساب المسافة غير متماثل)؛ أما المرجع `Array(Int8)` فيُعامَل هو نفسه على أنه رموز `quantizeBFloat16ToInt8` وتُفكّ تكميمه إلى مستويات إعادة البناء الخاصة به. لاحظ أن `p` يقتطع فقط رموز `QBit` المخزنة؛ أما المرجع `Array(Int8)` فهو استعلام كامل ويُعاد بناؤه دائمًا بدقة 8-بت الكاملة، لذا لا تكون هذه مسافة متماثلة بين طرفين مكمّمين إلا عند `p = 8` (أما عند `p < 8` فلا يُقرأ إلا الطرف المخزن بدقة أخشن). ويجب أن يكون في الفضاء نفسه الذي كانت فيه القيم قبل التكميم (أي بعد تطبيق التدوير العشوائي والتحجيم نفسيهما)، وهذه مسؤولية المستدعي. إن cosine distance ثابتة تجاه التحجيم؛ أما dot product ومسافة L2 فليستا كذلك.

**الصيغة**

```sql theme={null}
L2DistanceTransposedQuantized(vectors, reference, p[, used_dims])
```

**المعاملات**

* `vectors` — متجهات رموز `quantizeBFloat16ToInt8`. [`QBit(Int8, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي (الاستعلام): مصفوفة `Float` (أي الاستعلام، وتُجرى المقارنة بدقة `Float32` -- ويُضيَّق استعلام `Float64` إلى `Float32`)، أو `Array(Int8)` من رموز `quantizeBFloat16ToInt8` تُفك كميًا آنيًا. [`Array(Float32)`](/docs/ar/reference/data-types/array) أو [`Array(Int8)`](/docs/ar/reference/data-types/array)
* `p` — عدد البِتّات العليا من كل رمز `QBit` مخزَّن المطلوب استخدامه (من 1 إلى 8). يؤدّي استخدام عدد أقل من البِتّات إلى إعادة بناء مكمِّم مضمَّن أكثر خشونة لتسريع عمليات IO مع تقليل الدقة؛ وتمثل 8 بِتّات إعادة بناء بالدقة الكاملة. يقتصر `p` على اقتطاع `QBit` المخزَّن فقط؛ أما المرجع `Array(Int8)` فيُعاد بناؤه دائمًا بدقة 8 بِتّات كاملة. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى المطلوب قراءتها لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي `stride`. يجب أن يكون مضاعفًا لـ `stride` الخاص بـ `QBit` وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (وأي عناصر إضافية لاحقة يتم تجاهلها). لا تُقرأ إلا مجموعات `stride` التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المعادة**

يعيد المسافة التقريبية لمعيار 2. ويُرجع دائمًا `Float64`. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT L2DistanceTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;
```

<div id="L2Norm">
  ## L2Norm
</div>

تم تقديمها في: v21.11.0

تحسب الجذر التربيعي لمجموع مربعات عناصر المتجه.

**الصيغة**

```sql theme={null}
L2Norm(vector)
```

**الأسماء البديلة**: `normL2`

**المعاملات**

* `vector` — متجه أو Tuple من القيم العددية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المُعادة**

تُرجع معيار L2 أو [المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance). [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L2Norm((1, 2))
```

```response title=Response theme={null}
┌───L2Norm((1, 2))─┐
│ 2.23606797749979 │
└──────────────────┘
```

<div id="L2Normalize">
  ## L2Normalize
</div>

قُدِّمت في: v21.11.0

يحسب متجه الوحدة لمتجه معيّن (عناصر الـ Tuple هي الإحداثيات) في الفضاء الإقليدي (باستخدام [المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance)).

**الصيغة**

```sql theme={null}
L2Normalize(tuple)
```

**الأسماء البديلة**: `normalizeL2`

**الوسيطات**

* `tuple` — قيمة من النوع Tuple تتألف من قيم رقمية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المعادة**

يعيد متجه الوحدة. [`Tuple(Float64)`](/docs/ar/reference/data-types/tuple)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L2Normalize((3, 4))
```

```response title=Response theme={null}
┌─L2Normalize((3, 4))─┐
│ (0.6,0.8)           │
└─────────────────────┘
```

<div id="L2SquaredDistance">
  ## L2SquaredDistance
</div>

قُدِّم في: v22.7.0

يحسب مجموع مربعات الفروق بين العناصر المناظرة في متجهين.

**البنية**

```sql theme={null}
L2SquaredDistance(vector1, vector2)
```

**الأسماء البديلة**: `distanceL2Squared`

**الوسيطات**

* `vector1` — المتجه الأول. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — المتجه الثاني. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المعادة**

تعيد مجموع مربعات الفروق بين العناصر المناظرة في متجهين. بالنسبة إلى مُدخلات `Array`، يكون نوع الإرجاع `Float32` إذا كان النوع الشامل المشترك الأدنى لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فيكون `Float64`. أما بالنسبة إلى مُدخلات `Tuple`، فيتبع نوع الإرجاع نوع النتيجة الحسابية للعمليات على مستوى العناصر (مع الاحتفاظ بالأنواع الصحيحة). [`(U)Int*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0])
```

```response title=Response theme={null}
┌─L2SquaredDis⋯ [0, 0, 0])─┐
│                       14 │
└──────────────────────────┘
```

<div id="L2SquaredNorm">
  ## L2SquaredNorm
</div>

قُدِّمت في: v22.7.0

تحسب مربع الجذر التربيعي لمجموع مربعات عناصر المتجه (أي [`L2Norm`](#L2Norm)).

**البنية**

```sql theme={null}
L2SquaredNorm(vector)
```

**الأسماء المستعارة**: `normL2Squared`

**الوسيطات**

* `vector` — متجه أو Tuple من القيم العددية. [`Array(T)`](/docs/ar/reference/data-types/array) أو [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المعادة**

يعيد مربع معيار L2. [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float) أو [`Decimal`](/docs/ar/reference/data-types/decimal)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT L2SquaredNorm((1, 2))
```

```response title=Response theme={null}
┌─L2SquaredNorm((1, 2))─┐
│                     5 │
└───────────────────────┘
```

<div id="LinfDistance">
  ## LinfDistance
</div>

أُضيفت في: v21.11.0

تحسب المسافة بين نقطتين (تمثل عناصر المتجهات الإحداثيات) في الفضاء `L_{inf}` ([المعيار الأعظمي](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))).

**الصيغة**

```sql theme={null}
LinfDistance(vector1, vector2)
```

**الأسماء البديلة**: `distanceLinf`

**الوسائط**

* `vector1` — المتجه الأول. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — المتجه الثاني. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المعادة**

تعيد مسافة معيار اللانهاية. بالنسبة إلى مُدخلات `Array`، تُعيد `Float32` إذا كان النوع الأعلى المشترك الأدنى لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فتُعيد `Float64`. أما بالنسبة إلى مُدخلات `Tuple`، فتُعيد دائمًا `Float64`. [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT LinfDistance((1, 2), (2, 3))
```

```response title=Response theme={null}
┌─LinfDistance((1, 2), (2, 3))─┐
│                            1 │
└──────────────────────────────┘
```

<div id="LinfNorm">
  ## LinfNorm
</div>

أُضيفت في الإصدار: v21.11.0

يحسب أكبر قيمة مطلقة بين عناصر المتجه.

**البنية**

```sql theme={null}
LinfNorm(vector)
```

**الأسماء البديلة**: `normLinf`

**الوسيطات**

* `vector` — متجه أو Tuple من القيم الرقمية. [`Array(T)`](/docs/ar/reference/data-types/array) أو [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المُعادة**

تُرجِع معيار Linf أو أكبر قيمة مطلقة. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT LinfNorm((1, -2))
```

```response title=Response theme={null}
┌─LinfNorm((1, -2))─┐
│                 2 │
└───────────────────┘
```

<div id="LinfNormalize">
  ## LinfNormalize
</div>

أُضيفت في: v21.11.0

تحسب متجه الوحدة لمتجه معيّن (عناصر الـ Tuple هي الإحداثيات) في فضاء `L_{inf}` (باستخدام [المعيار الأعظمي](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))).

**الصيغة**

```sql theme={null}
LinfNormalize(tuple)
```

**الأسماء البديلة**: `normalizeLinf`

**المعاملات**

* `tuple` — Tuple من القيم الرقمية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple)

**القيمة المُعادة**

تُرجع متجه الوحدة. [`Tuple(Float64)`](/docs/ar/reference/data-types/tuple)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT LinfNormalize((3, 4))
```

```response title=Response theme={null}
┌─LinfNormalize((3, 4))─┐
│ (0.75,1)              │
└───────────────────────┘
```

<div id="LpDistance">
  ## LpDistance
</div>

أُضيفت في: v21.11.0

تحسب المسافة بين نقطتين (عناصر المتجهات هي الإحداثيات) في فضاء `Lp` ([مسافة معيار p](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)).

**البنية**

```sql theme={null}
LpDistance(vector1, vector2, p)
```

**الأسماء البديلة**: `distanceLp`

**المعاملات**

* `vector1` — المتجه الأول. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — المتجه الثاني. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `p` — الأس. القيم الممكنة: عدد حقيقي ضمن `[1; inf)`. [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**القيمة المُعادة**

تُرجِع مسافة معيار p. بالنسبة إلى مُدخلات `Array`، تُرجِع `Float32` إذا كان أقل نوع فائق مشترك لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فتُرجِع `Float64`. أما بالنسبة إلى مُدخلات `Tuple`، فتُرجِع دائمًا `Float64`. [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT LpDistance((1, 2), (2, 3), 3)
```

```response title=Response theme={null}
┌─LpDistance((1, 2), (2, 3), 3)─┐
│            1.2599210498948732 │
└───────────────────────────────┘
```

<div id="LpNorm">
  ## LpNorm
</div>

أُضيفت في: v21.11.0

تحسب معيار p لمتجه، وهو الجذر من الرتبة p لمجموع القوى من الرتبة p للقيم المطلقة لعناصره.

حالات خاصة:

* عندما تكون p=1، فإنها تكافئ L1Norm (مسافة مانهاتن).
* عندما تكون p=2، فإنها تكافئ L2Norm (المسافة الإقليدية).
* عندما تكون p=∞، فإنها تكافئ LinfNorm (المعيار الأعظمي).

**البنية**

```sql theme={null}
LpNorm(vector, p)
```

**الأسماء البديلة**: `normLp`

**المعاملات**

* `vector` — متجه أو `Tuple` من القيم العددية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `p` — الأسّ. القيم الممكنة هي أعداد حقيقية ضمن النطاق `[1; inf)`. [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**القيمة المعادة**

يعيد [معيار Lp](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm). [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT LpNorm((1, -2), 2)
```

```response title=Response theme={null}
┌─LpNorm((1, -2), 2)─┐
│   2.23606797749979 │
└────────────────────┘
```

<div id="LpNormalize">
  ## LpNormalize
</div>

أُضيفت في: v21.11.0

تحسب متجه الوحدة لمتجه معيّن (تمثل عناصر الـ Tuple الإحداثيات) في فضاء `Lp` (باستخدام [p-norm](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)).

**البنية**

```sql theme={null}
LpNormalize(tuple, p)
```

**الأسماء المستعارة**: `normalizeLp`

**الوسائط**

* `tuple` — قيمة `Tuple` من القيم العددية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple)
* `p` — الأس. القيم الممكنة هي أي عدد ضمن المجال `[1; inf)`. [`UInt*`](/docs/ar/reference/data-types/int-uint) أو [`Float*`](/docs/ar/reference/data-types/float)

**القيمة المُعادة**

تُرجع متجه الوحدة. [`Tuple(Float64)`](/docs/ar/reference/data-types/tuple)

**أمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT LpNormalize((3, 4), 5)
```

```response title=Response theme={null}
┌─LpNormalize((3, 4), 5)──────────────────┐
│ (0.7187302630182624,0.9583070173576831) │
└─────────────────────────────────────────┘
```

<div id="cosineDistance">
  ## cosineDistance
</div>

قُدِّمت في: v21.11.0

تحسب [مسافة جيب التمام](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) بين متجهين (عناصر Tuple هي الإحداثيات). وكلما صغرت القيمة المعادة، زاد التشابه بين المتجهين.

**بناء الجملة**

```sql theme={null}
cosineDistance(vector1, vector2)
```

**الأسماء البديلة**: `distanceCosine`

**الوسائط**

* `vector1` — الـ Tuple الأولى. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)
* `vector2` — الـ Tuple الثانية. [`Tuple(T)`](/docs/ar/reference/data-types/tuple) أو [`Array(T)`](/docs/ar/reference/data-types/array)

**القيمة المعادة**

تعيد مسافة جيب التمام (أي واحدًا ناقص تشابه جيب التمام). بالنسبة إلى مُدخلات `Array`، تعيد `Float32` إذا كان النوع الأعلى المشترك الأدنى لأنواع العناصر هو `Float32` أو `BFloat16`، وإلا فتعيد `Float64`. أما بالنسبة إلى مُدخلات `Tuple`، فتعيد دائمًا `Float64`. [`Float*`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT cosineDistance((1, 2), (2, 3));
```

```response title=Response theme={null}
┌─cosineDistance((1, 2), (2, 3))─┐
│           0.007722123286332261 │
└────────────────────────────────┘
```

<div id="cosineDistanceTransposed">
  ## cosineDistanceTransposed
</div>

تمت إضافته في: v26.1.0

يحسب [مسافة جيب التمام](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) التقريبية بين نقطتين (إذ تمثل قيم المتجهات الإحداثيات). وكلما صغرت القيمة المُعادة، زاد التشابه بين المتجهات.

**الصيغة**

```sql theme={null}
cosineDistanceTransposed(vector1, vector2, p[, used_dims])
```

**الأسماء البديلة**: `distanceCosineTransposed`

**الوسائط**

* `vectors` — متجهات. [`QBit(T, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي. [`Array(T)`](/docs/ar/reference/data-types/array)
* `p` — عدد البِتّات من كل عنصر في المتجه التي ستُستخدم في حساب المسافة (من 1 حتى عرض البِتّ للعنصر). يتحكم مستوى التكميم في موازنة بين الدقة والسرعة. يؤدي استخدام عدد أقل من البِتّات إلى تسريع عمليات I/O والحسابات مع انخفاض الدقة، بينما يؤدي استخدام عدد أكبر من البِتّات إلى زيادة الدقة على حساب الأداء. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى التي ستُقرأ، لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي stride. يجب أن يكون مضاعفًا لـ stride الخاص بـ QBit، وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (ويُتجاهل أي عناصر إضافية لاحقة). لا تُقرأ إلا مجموعات stride التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المُعادة**

تُرجع مسافة جيب التمام التقريبية (واحد ناقص تشابه جيب التمام). وتكون القيمة المُعادة دائمًا من النوع Float64. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
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;
```

```response title=Response theme={null}
┌─cosineDistanceTransposed([0, 1], [1, 2], 16)─┐
│                          0.10557280905788935 │
└──────────────────────────────────────────────┘
```

<div id="cosineDistanceTransposedQuantized">
  ## cosineDistanceTransposedQuantized
</div>

أُضيف في: v26.7.0

يحسب [مسافة جيب التمام](https://en.wikipedia.org/wiki/Cosine_similarity#Cosine_distance) التقريبية بين رموز `QBit(Int8)` التابعة لـ `quantizeBFloat16ToInt8` (التي يُفكّ تكميمها آنيًا) ومتجه مرجعي. وكلما صغرت القيمة المعادة، زاد تشابه المتجهات. يُقارَن متجه مرجعي (استعلام) من نوع `Float` مباشرةً بدقة `Float32` — وهي دقة إعادة بناء الرموز بعد فك التكميم — لذا يُحوَّل استعلام `Float64` إلى `Float32`، بينما يُوسَّع استعلام `BFloat16` إليه بدقة تامة (أي إن حساب المسافة غير متماثل)؛ أما المرجع `Array(Int8)` فيُعامَل هو نفسه على أنه رموز `quantizeBFloat16ToInt8` ويُفكّ تكميمه إلى مستويات إعادة البناء الخاصة به. لاحظ أن `p` يقتطع فقط رموز `QBit` المخزنة؛ أما المرجع `Array(Int8)` فهو استعلام كامل ويُعاد بناؤه دائمًا بدقة 8 بت كاملة، لذلك لا تكون هذه مسافة متماثلة بين قيم مكمّاة إلا عند `p = 8` (أما عند `p < 8` فلا يُقرأ إلا الجانب المخزن بدقة أقل). ويجب أن يكون في الفضاء نفسه الذي كانت فيه القيم قبل التكميم (أي بعد تطبيق التدوير العشوائي والتحجيم نفسيهما)، وهذا يقع على عاتق المستدعي. مسافة جيب التمام لا تتأثر بالتحجيم؛ أما الضرب النقطي ومسافة L2 فليسا كذلك.

**البنية**

```sql theme={null}
cosineDistanceTransposedQuantized(vectors, reference, p[, used_dims])
```

**المعاملات**

* `vectors` — متجهات من رموز `quantizeBFloat16ToInt8`. [`QBit(Int8, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي (الاستعلام): مصفوفة `Float` (أي الاستعلام، وتتم مقارنته بدقة `Float32` -- ويُحوَّل استعلام `Float64` إلى `Float32`)، أو `Array(Int8)` من رموز `quantizeBFloat16ToInt8` تُفك كميتها آنيًا. [`Array(Float32)`](/docs/ar/reference/data-types/array) أو [`Array(Int8)`](/docs/ar/reference/data-types/array)
* `p` — عدد البتات العليا من كل رمز `QBit` مخزَّن المطلوب استخدامها (من 1 إلى 8). يؤدي استخدام عدد أقل من البتات إلى إعادة بناء مُكمِّم مضمَّن أكثر خشونة لتسريع `I/O` على حساب الدقة؛ وتمثل 8 بتات إعادة البناء بالدقة الكاملة. يقتصر تأثير `p` على بتر `QBit` المخزَّن فقط؛ أما المرجع من النوع `Array(Int8)` فيُعاد بناؤه دائمًا بدقة 8 بت كاملة. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى المطلوب قراءتها لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي `stride`. يجب أن يكون مضاعفًا لـ `stride` الخاص بـ `QBit` وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (وأي عناصر زائدة لاحقة يتم تجاهلها). لا تُقرأ إلا مجموعات `stride` التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المعادة**

تعيد مسافة جيب التمام التقريبية (واحد ناقص تشابه جيب التمام). وتُعيد دائمًا `Float64`. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT cosineDistanceTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;
```

<div id="dotProductTransposed">
  ## dotProductTransposed
</div>

تمت إضافته في: v26.7.0

يحسب [الضرب القياسي](https://en.wikipedia.org/wiki/Dot_product) التقريبي (الجداء الداخلي) لمتجهين (إذ تمثل قيم المتجهات الإحداثيات). وعلى عكس دوال المسافة، فهذا مقياس للتشابه: فكلما كبرت القيمة المُعادة، زاد التشابه بين المتجهات.

**الصيغة**

```sql theme={null}
dotProductTransposed(vector1, vector2, p[, used_dims])
```

**الأسماء البديلة**: `scalarProductTransposed`

**الوسائط**

* `vectors` — متجهات. [`QBit(T, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي. [`Array(T)`](/docs/ar/reference/data-types/array)
* `p` — عدد البِتّات من كل عنصر في المتجه التي ستُستخدم في الحساب (من 1 حتى عرض البِتّ للعنصر). يتحكم مستوى التكميم في موازنة بين الدقة والسرعة. يؤدي استخدام عدد أقل من البِتّات إلى تسريع عمليات I/O والحسابات مع انخفاض الدقة، بينما يؤدي استخدام عدد أكبر من البِتّات إلى زيادة الدقة على حساب الأداء. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى التي ستُقرأ لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي `stride`. يجب أن يكون مضاعفًا لـ `stride` الخاص بـ `QBit` وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (وأي عناصر إضافية في النهاية يتم تجاهلها). لا تُقرأ إلا مجموعات `stride` التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المُعادة**

تُرجع الضرب القياسي التقريبي للمتجهين. وتكون القيمة المُعادة دائمًا من النوع `Float64`. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, [0, 1]);
SELECT dotProductTransposed(vec, array(1, 2), 16) FROM qbit;
```

```response title=Response theme={null}
┌─dotProductTransposed([0, 1], [1, 2], 16)─┐
│                                   2.0625 │
└──────────────────────────────────────────┘
```

<div id="dotProductTransposedQuantized">
  ## dotProductTransposedQuantized
</div>

تمت إضافته في: v26.7.0

يحسب [الضرب القياسي](https://en.wikipedia.org/wiki/Dot_product) التقريبي (الجداء الداخلي) بين `QBit(Int8)` من رموز `quantizeBFloat16ToInt8` (تُفكّ تكميمها آنيًا) ومتجه مرجعي. وهذا مقياس للتشابه: فكلما كبرت القيمة المُعادة، زاد التشابه بين المتجهات. يُقارَن متجه مرجعي (استعلام) من نوع `Float` مباشرة بدقة `Float32` -- وهي دقة إعادة بناء الرموز بعد فكّ تكميمها، لذا يُحوَّل استعلام `Float64` إلى `Float32`، بينما يُوسَّع استعلام `BFloat16` إليه تمامًا (حساب مسافة غير متماثل)؛ أما المرجع `Array(Int8)` فيُتعامل معه هو نفسه على أنه رموز `quantizeBFloat16ToInt8`، وتُفكّ تكميمه إلى مستويات إعادة البناء الخاصة به. لاحظ أن `p` يقتطع فقط رموز `QBit` المخزَّنة؛ أما المرجع `Array(Int8)` فهو في حد ذاته استعلام كامل، ويُعاد بناؤه دائمًا بدقة 8-بت كاملة، لذا لا يكون هذا حساب مسافة متناظرًا بين بيانات مكمَّمة وأخرى مكمَّمة إلا عند `p = 8` (أما عند `p < 8` فلا يُقرأ من الجانب المخزَّن إلا بدقة أخشن). ويجب أن يكون في الفضاء نفسه الذي كانت القيم فيه قبل التكميم (أي بعد الدوران العشوائي والتحجيم نفسيهما)، وهذه مسؤولية المستدعي. مسافة جيب التمام غير متأثرة بالتحجيم؛ أما الضرب القياسي ومسافة L2 فليسا كذلك.

**الصيغة**

```sql theme={null}
dotProductTransposedQuantized(vectors, reference, p[, used_dims])
```

**الوسائط**

* `vectors` — متجهات من رموز `quantizeBFloat16ToInt8`. [`QBit(Int8, UInt64[, UInt64])`](/docs/ar/reference/data-types/qbit)
* `reference` — المتجه المرجعي (الاستعلام): مصفوفة `Float` (أي الاستعلام، ويُقارَن بدقة `Float32` -- ويُحوَّل الاستعلام من النوع `Float64` إلى `Float32`)، أو `Array(Int8)` من رموز `quantizeBFloat16ToInt8` يُفك تكميمها آنيًا. [`Array(Float32)`](/docs/ar/reference/data-types/array) أو [`Array(Int8)`](/docs/ar/reference/data-types/array)
* `p` — عدد البِتّات العليا من كل رمز `QBit` مخزنة التي ستُستخدم (من 1 إلى 8). يؤدي استخدام عدد أقل من البِتّات إلى إعادة بناء مُكمِّم مضمن أكثر خشونة لتسريع عمليات I/O مع انخفاض الدقة؛ وتمثل 8 بِتّات إعادة البناء كاملة الدقة. يقتطع `p` فقط قيمة `QBit` المخزنة؛ أما المرجع من النوع `Array(Int8)` فيُعاد بناؤه دائمًا بدقة كاملة تبلغ 8 بِتّات. [`UInt`](/docs/ar/reference/data-types/int-uint)
* `used_dims` — اختياري. عدد الأبعاد الأولى التي ستُقرأ لإجراء بحث منخفض الأبعاد (Matryoshka) على `QBit` ذي `stride`. يجب أن يكون مضاعفًا لـ `stride` الخاص بـ `QBit` وألا يتجاوز بُعده، ويجب أن يحتوي المتجه المرجعي على هذا العدد من العناصر على الأقل (وأي عناصر إضافية لاحقة يتم تجاهلها). لا تُقرأ إلا مجموعات `stride` التي تغطي هذه الأبعاد. [`UInt`](/docs/ar/reference/data-types/int-uint)

**القيمة المُعادة**

تُرجع الضرب القياسي التقريبي للمتجهين. وتكون القيمة المُعادة دائمًا من النوع `Float64`. [`Float64`](/docs/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
CREATE TABLE qbit (id UInt32, vec QBit(Int8, 2)) ENGINE = Memory;
INSERT INTO qbit VALUES (1, arrayMap(x -> quantizeBFloat16ToInt8(x), [0.1, -0.5]::Array(BFloat16)));
SELECT dotProductTransposedQuantized(vec, [0.1, -0.5]::Array(Float32), 8) FROM qbit;
```
