概要
内積(ドット積)は、2 つの数列(ベクトル)を「掛けて足す」計算です。
Excel では、これをそのまま 1 本でやってくれるのが SUMPRODUCT 関数です。
この「各要素同士を掛け算 → すべて合計」という処理を、SUMPRODUCT(配列1, 配列2) でそのまま計算できます。
SUMPRODUCT 関数の基本(内積の器)
書式と意味
=SUMPRODUCT(配列1, [配列2], [配列3], …)
配列とは「セル範囲」だと思ってください。
SUMPRODUCT は、同じ位置にある要素同士を掛け算し、その結果を全部足す関数です。
たとえば、次の 2 つの数列(縦ベクトル)があるとします。
- A1:A3 → 2, 5, 3
- B1:B3 → 4, 1, 7
この内積は、
Excel ではこう書けます。
=SUMPRODUCT(A1:A3,B1:B3)
これだけで「内積 = 掛け算して足した結果」が一発で求まります。
内積としての SUMPRODUCT のイメージ
「1 行ずつ掛けて足す」=内積
SUMPRODUCT がやっていることを、手計算で書き下すとこうです。
- 1 行目:A1 × B1
- 2 行目:A2 × B2
- 3 行目:A3 × B3
- それらを全部足す
つまり、
=SUMPRODUCT(A1:A3,B1:B3)
は裏側で、
= A1*B1 + A2*B2 + A3*B3
をやっているのと同じです。
「2 つのベクトルの内積」そのものになっています。
配列は同じ長さが必須
内積は「同じ次元のベクトル同士」でしか定義できないのと同じで、
SUMPRODUCT の配列も「行数・列数が同じ」必要があります。
たとえば、
=SUMPRODUCT(C2:C10,D2:D5)
のように、長さが違う範囲を渡すと #VALUE! エラーになります。
内積の具体例
例1:単純な数列同士の内積
A1:A3 に 2, 5, 3
B1:B3 に 4, 1, 7
この内積は、先ほどと同じく次の式です。
=SUMPRODUCT(A1:A3,B1:B3)
結果は 34(= 2×4 + 5×1 + 3×7)になります。
例2:x 成分・y 成分を持つ 2 次元ベクトルの内積
ベクトル v = (vx, vy)、w = (wx, wy) を考えます。
Excel 上では、例えば次のように列に分けて持ちます。
- A 列:ベクトル v の x, y
- B 列:ベクトル w の x, y
A1:vx, A2:vy
B1:wx, B2:wy
このとき、内積 v・w は:
=SUMPRODUCT(A1:A2,B1:B2)
となります。
中身は
を計算しているのと同じです。
例3:3 次元ベクトルの内積
A1:A3 にベクトル v = (vx, vy, vz)
B1:B3 にベクトル w = (wx, wy, wz)
この内積 v・w は、
=SUMPRODUCT(A1:A3,B1:B3)
で OK です。
要素を増やしても、「対応する成分同士を掛けて足す」という構造は同じです。
内積 × SUMPRODUCT のテンプレート
基本テンプレート(1 列ベクトル同士)
=SUMPRODUCT(ベクトル1の範囲, ベクトル2の範囲)
例:
=SUMPRODUCT(A1:A3,B1:B3)
行ベクトル同士(横並び)の内積
もし横方向に並べているなら、行をそのまま指定して構いません。
=SUMPRODUCT(A1:C1, A2:C2)
A1〜C1 と A2〜C2 の内積になります。
ベクトルを別シートから取る場合
=SUMPRODUCT(Sheet1!A1:A3, Sheet2!B1:B3)
シートが違っても、同じ長さで並んでいればそのまま内積として扱えます。
内積として使うときの注意点
数値以外は 0 として扱われる
SUMPRODUCT は、配列の中にある「数値以外の要素(文字列など)」を 0 として扱います。
内積としてきちんと計算したいなら、範囲に余計な文字列などが混ざっていないか注意が必要です。
列全体指定は重くなる
=SUMPRODUCT(A:A,B:B) のように列全体を指定すると、
Excel は 100 万行超を全部掛けて足そうとするので、処理が重くなります。
内積として使うときは、実際に値が入っている範囲だけをきちんと指定するのがおすすめです。
例題
問題1
A1:A3 に「2, 5, 3」、B1:B3 に「4, 1, 7」が入っています。
この 2 つの数列の内積を、SUMPRODUCT 関数 1 本で求める式を書いてください。
あわせて、計算結果がいくつになるかも答えてください。
問題2
A1:A2 にベクトル v = (3, −2)、B1:B2 にベクトル w = (4, 5) が入っています。
この 2 つのベクトルの内積を SUMPRODUCT で求める式を書いてください。
また、その結果がどう計算されるか、式の中身(掛け算と足し算)も書いてください。
問題3
横方向にベクトルが並んでいます。
A1:C1 に (1, 2, 3)、A2:C2 に (4, 5, 6) が入っています。
この 2 行を「ベクトル」として見たとき、内積を SUMPRODUCT で求める式を書いてください。
問題4
次の式は、数学的に言うと何を計算しているか説明してください。
=SUMPRODUCT(D2:D5, E2:E5)
D 列と E 列に、それぞれ 4 要素のベクトルが入っていると考えた場合、
どのような内積を計算しているのか、
「要素ごとに掛けて足す」という視点で日本語で説明してみてください。
問題5
次の式が #VALUE! エラーになりました。
=SUMPRODUCT(A1:A5,B1:B3)
なぜエラーになるのか、「内積」の観点から理由を説明してください。
(ヒント:片方は 5 要素、もう片方は 3 要素です。)

