【図解】ベクトル(配列)の畳み込みの意味と例題について

はるか
はるか
畳み込み…簡単に言うと、インデックスの和を一定にして足し合わせる。
ふゅか
ふゅか
なるほど!確か…信号処理でも使われるよね!

1. ベクトルの畳み込みとは

畳み込みは、二つのベクトルを組み合わせてインデックスの和を一定にして、足し合わせて新しいベクトルを生成する数学的な操作です。主に、信号処理、Z変換や機械学習などで使われます。ベクトル以外にも、確率や関数の畳み込みもありますが、どちらも和を一定にして足し合わせるという考え方は同じです。

2. 離散ベクトルの畳み込み

離散的なベクトル \( \mathbf{a} \) と \( \mathbf{b} \) が与えられたとします。それぞれの要素は次のように表されます。

\[ \mathbf{a} = [a_0, a_1, \dots, a_{N-1}] \] \[ \mathbf{b} = [b_0, b_1, \dots, b_{M-1}] \]

これらの畳み込み \( \mathbf{c} = \mathbf{a} * \mathbf{b} \) は以下の式で計算されます。

\[ c_n = \sum_{k} a_k \cdot b_{n - k} \]

添え字の部分に着目すると、 $a_k \cdot b_{n - k}$となっており、$k+n-k=n$となるので、和がnになるように計算しています。

3. 畳み込みの計算方法

はるか
はるか
計算自体は簡単。ベクトルを反転してずらしていくだけ。

ベクトル \(X= [1, 2, 3] \) と \( Y=[2, 0, 4] \) の畳み込み$Z=X*Y$を計算します。動画にすると、次のような流れになります。

畳み込みの計算手順をひとつずつ見ていきましょう。

3.1. 準備

ベクトルYを逆向きにします。

$$(1 \times 2) = 2$$

3.2. インデックスの和が1

$$ (1 \times 0) + (2 \times 2) = 4$$

3.3. インデックスの和が2

$$ (1 \times 4) + (2 \times 0) + (3 \times 2) = 10$$

3.4. インデックスの和が3

$$ (2 \times 4) + (3 \times 0) = 8$$

3.5. インデックスの和が4

$$(3 \times 4) = 12$$

3.6. 畳み込みの計算結果

ベクトル \(X= [1, 2, 3] \) と \( Y=[2, 0, 4] \) の畳み込み$Z=X*Y$の計算をまとめると、

  1. \((1 \times 2) = 2\)
  2. \((1 \times 0) + (2 \times 2) = 4\)
  3. \((1 \times 4) + (2 \times 0) + (3 \times 2) = 10\)
  4. \((2 \times 4) + (3 \times 0) = 8\)
  5. \((3 \times 4) = 12\)

結果として、畳み込みの結果$Z$は次のようになります。

\[ Z=[2, 4, 10, 8, 12] \]

4. 例題

4.1. 畳み込みの基礎

以下のようにベクトル \( f \) と \( g \) があるとします。

  • \( f = [1, 2, 3] \)
  • \( g = [0, 1, 0.5] \)

\( f = [1, 2, 3] \) と \( g = [0, 1, 0.5] \) の畳み込みZを計算しなさい。

  1. \( Z[0] = 1 \times 0 = 0 \)
  2. \( Z[1] = (1 \times 1) + (2 \times 0) = 1 \)
  3. \( Z[2] = (1 \times 0.5) + (2 \times 1) + (3 \times 0) = 0.5 + 2 = 2.5 \)
  4. \(Z[3] = (2 \times 0.5) + (3 \times 1) = 1 + 3 = 4 \)
  5. \( Z[4] = 3 \times 0.5 = 1.5 \)\

計算の結果、畳み込み \( Z\) は次のようになります。

\[ Z= [0, 1, 2.5, 4, 1.5] \]

PR