Skip to content

直積とアダマール積(Hadamard 積)の基礎

このページでは、線形代数でよく現れる「直積(主にベクトル・行列のテンソル積 / クロネッカー積)」と「アダマール積(Hadamard 積:要素ごとの積)」の違いと使いどころを整理する。

参考にしたドキュメント

1. 用語の整理

文脈により「直積」は少し意味が変わるが、このページでは主に

  • ベクトル空間の直積:
    V×W のように、2 つのベクトル空間を組にした新しい空間
  • ベクトル・行列のテンソル積 / クロネッカー積:
    • ベクトル:uv
    • 行列:AB

を指すものとして説明する(特に行列については「クロネッカー積」と呼ばれることが多い)。

一方、

  • アダマール積(Hadamard 積):
    同じサイズの行列を、要素ごとに掛け合わせる積
    $ (A \circ B){ij} = A B_{ij} $

のことを指す。

2. ベクトルの直積(テンソル積)

2.1 定義(ベクトル)

長さ m のベクトル u、長さ n のベクトル v を考える:

u=(u1u2um),v=(v1v2vn)

このとき、テンソル積(直積) uv は長さ mn のベクトルで、

uv=(u1v1u1v2u1vnu2v1u2v2u2vnumv1umvn)

のように定義される(並び順は約束によるが、一般にこのような形)。

2.2 イメージ

  • 次元を増やす操作:
    • uRm,vRn から
      uvRmn を作る。
  • 量子力学の 2 体系(スピン系など)やテンソルネットワークでは、
    • 「2 つの自由度をまとめて 1 つの大きな状態として扱う」際の基本操作になる。

3. 行列の直積(クロネッカー積)

3.1 定義(行列)

Am×n 行列、Bp×q 行列とするとき、
クロネッカー積(直積) ABmp×nq 行列で、

AB=(a11Ba12Ba1nBa21Ba22Ba2nBam1Bam2BamnB)

と定義される。

3.2 簡単な例

A=(1234),B=(0567)

のとき、

AB=(1B2B3B4B)=(0501067121401502018212428)

となる。

3.3 性質(ごく一部)

  • サイズ:
    • Am×nBp×q なら
      ABmp×nq
  • 積との相性(よく使う性質):
    • (AB)(CD)=(AC)(BD)
      (次元が合う場合)
  • 固有値:
    • A の固有値を λiB の固有値を μj とすると、
      AB の固有値は λiμj になる。

4. アダマール積(Hadamard 積)

4.1 定義

同じサイズの行列 A=(aij),B=(bij) に対して、
アダマール積 AB

(AB)ij=aijbij

と「要素ごと(成分ごと)」に掛け算した行列として定義される。

例として、どちらも 2×2 行列のとき:

A=(1234),B=(5678)

なら

AB=(15263748)=(5122132)

となる。

4.2 性質

  • サイズ:
    • AB は同じサイズでなければならない。
  • 対応する要素ごとの積なので、
    • (AB)C=A(BC)
    • AB=BA が成り立つ(結合律・交換律)。
  • スペクトル(固有値)やランクなどの性質は、通常の行列積・クロネッカー積と全く異なる。

5. 直積(クロネッカー積)とアダマール積の違い

5.1 操作としての違い

  • 直積(テンソル / クロネッカー積)

    • 次元を増やす/ブロック構造を作る操作。
    • 行列サイズが大きく変わる(Am×nBp×qmp×nq)。
    • 多体系の状態や、線形写像の構造を表現するときに使う。
  • アダマール積

    • 同じサイズの行列の「要素ごとの掛け算」。
    • サイズは変わらない。
    • 重み付きマスク、共分散行列からの操作、Hadamard 不等式など、確率・統計・信号処理・機械学習でよく使われる。

5.2 典型的な用途の違い

観点直積(テンソル / クロネッカー)アダマール積(Hadamard)
次元増える(大きな行列になる)変わらない
使う場面多体系量子状態、テンソルネットワーク、離散化、線形写像の構成など要素ごとの重み付け、マスク、共分散操作、カーネルの組み合わせなど
線形写像としての扱い「別の空間への線形変換」として自然に解釈できる通常はある空間上の「点ごとの操作」として解釈
名前クロネッカー積、テンソル積Hadamard 積、要素ごとの積

6. どちらをいつ使うか

6.1 直積を使う場面

  • 「自由度を増やしたい」とき
    • 2 つのベクトル空間 V, W から VW を作る。
  • 「2 つの行列の線形写像を組み合わせた新しい写像」を作るとき
    • 例:離散化された 2D 作用素を 1D 作用素のテンソル積として表現する。
  • 量子力学・テンソルネットワーク
    • 多体波動関数、ゲート演算、MPS/PEPS などの構成要素。

6.2 アダマール積を使う場面

  • 「同じ形のデータに対して、要素ごとに重みを掛けたい」とき
    • 画像にマスクをかける、行列要素ごとのスケール調整など。
  • カーネル法やガウス過程
    • カーネル行列同士の Hadamard 積で、新しいカーネルを構成することがある。
  • 統計・行列解析
    • 共分散行列を要素ごとに調整する、Hadamard 不等式に関する議論など。

7. まとめ

  • 「直積(テンソル / クロネッカー積)」は、
    • 空間や行列のサイズを増やし、自由度を組み合わせるための積。
  • 「アダマール積」は、
    • 同じサイズの行列の要素をそのまま掛け合わせるための積。

直積は「空間を作る/写像を構成する」操作、
アダマール積は「与えられた空間上でのローカルな操作」として使い分けるイメージを持つと整理しやすい。