に最終更新
INNER_PRODUCT
説明
配列で表された二つの密ベクトル、またはマップで表された二つの疎ベクトルの内積を計算します。疎ベクトルでは各マップキーが次元を識別し、その値が座標です。両方のマップにある次元だけが結果に寄与します。
構文
INNER_PRODUCT(<array1>, <array2>)
INNER_PRODUCT(<map1>, <map2>)
引数
| 引数 | 説明 |
|---|---|
<array1> | 第一密ベクトル。要素型は TINYINT、SMALLINT、INT、BIGINT、LARGEINT、FLOAT、DOUBLE に対応し、要素数は <array2> と同じである必要があります。 |
<array2> | 第二密ベクトル。要素型は TINYINT、SMALLINT、INT、BIGINT、LARGEINT、FLOAT、DOUBLE に対応し、要素数は <array1> と同じである必要があります。 |
<map1> | 第一疎ベクトル。型は MAP<K, FLOAT> で、K は整数型(TINYINT、SMALLINT、INT、BIGINT、LARGEINT)または文字列型(CHAR、VARCHAR、STRING)です。キーの型は <map2> と同じ型ファミリーに属する必要があります。 |
<map2> | 第二疎ベクトル。型の制約は <map1> と同じです。二つのマップのエントリ数は異なっていてもかまいません。 |
戻り値
内積を FLOAT 型で返します。
配列を入力した場合、対応する要素同士を乗算して合計します。いずれかの配列が NULL、NULL 要素を含む、または長さが異なる場合はエラーになります。
マップを入力した場合、同じキーの値同士を乗算して合計します。片方のマップにしかないキーは結果に影響せず、欠けている座標をゼロとして扱うのと同じです。NULL キーは別の NULL キーと一致します。同じキーが複数回現れる場合は最後の値を使います。いずれかのマップが NULL、またはいずれかのキーに残った値が NULL の場合はエラーになります。
例
SELECT INNER_PRODUCT([1, 2], [2, 3]),INNER_PRODUCT([3, 6], [4, 7]);
+-------------------------------+-------------------------------+
| inner_product([1, 2], [2, 3]) | inner_product([3, 6], [4, 7]) |
+-------------------------------+-------------------------------+
| 8 | 54 |
+-------------------------------+-------------------------------+
次の例では二つの疎ベクトルの内積を計算します。両方のマップにあるのはキー a と b だけなので、結果は 2 * 5 + 3 * 4 = 22 です。
SELECT INNER_PRODUCT(
MAP('a', CAST(2 AS FLOAT), 'b', CAST(3 AS FLOAT)),
MAP('b', CAST(4 AS FLOAT), 'c', CAST(100 AS FLOAT), 'a', CAST(5 AS FLOAT))
) AS result;
+--------+
| result |
+--------+
| 22 |
+--------+
入力配列が NULL の場合はエラーになります。
SELECT INNER_PRODUCT(NULL, [1, 2]);
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]First argument for function inner_product cannot be null
入力配列に NULL 要素がある場合はエラーになります。
SELECT INNER_PRODUCT([1, NULL], [1, 2]);
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]First argument for function inner_product cannot have null
マップの値が NULL の場合はエラーになります。
SELECT INNER_PRODUCT(
MAP(1, CAST(NULL AS FLOAT)),
MAP(1, CAST(2 AS FLOAT))
);
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]First argument for function inner_product cannot have null