# 아다마르 곱 (Hadamard Product)

아다마르 곱(Hadamard product, 원소별 곱, 항별 곱 또는 슈어곱이라고도 함)은 같은 차원의 두 행렬(또는 벡터)을 받아 피연산자와 같은 차원의 다른 행렬을 생성하는 이항 연산입니다. 결과 행렬의 각 원소 i, j는 원래 두 행렬의 원소 i, j의 곱입니다. 프랑스 수학자 자크 아다마르(Jacques Hadamard)의 이름을 땄으며, 같은 이름이 붙은 아다마르 행렬, 아다마르 변환, 양자 컴퓨팅의 아다마르 게이트와는 다른 개념입니다. 아다마르 행렬은 원소가 +1과 −1이고 행끼리 서로 직교하는 정사각 행렬이고, 아다마르 게이트는 큐비트를 0과 1의 균등한 중첩 상태로 바꾸는 연산입니다. 이 항목은 원소별 곱 연산만 다룹니다.

## 기본 사항

- 이항 연산이므로 두 개의 행렬을 결합합니다.
- 두 행렬 모두 크기가 같아야 합니다(행과 열의 수가 같아야 함).
- 결과 행렬은 원래 행렬과 같은 차원을 갖습니다.
- 일반적인 행렬 곱셈과 달리 교환 법칙이 성립합니다(A ⊙ B = B ⊙ A).
- 결합 법칙과 덧셈에 대한 분배 법칙이 성립합니다(A ⊙ (B + C) = A ⊙ B + A ⊙ C).
- 항등원은 단위 행렬이 아니라 모든 원소가 1인 행렬입니다.

일반적인 행렬 곱 AB는 A의 행과 B의 열을 내적해 계산하므로 A의 열 수와 B의 행 수만 맞으면 되고, 결과의 크기도 달라질 수 있습니다. 반면 아다마르 곱은 같은 위치의 원소끼리만 곱하므로 두 행렬의 크기가 완전히 같아야 하고, 계산량도 원소 수에 비례할 만큼 단순합니다.

## 작동 방식

차원이 2×2인 두 행렬 A와 B가 있다고 가정해 보겠습니다.

A = [a11 a12] [a21 a22]

B = [b11 b12] [b21 b22]

A ⊙ B로 표시되는 아다마르 곱은 다음과 같습니다.

A ⊙ B = [a11*b11 a12*b12] [a21*b21 a22*b22]

## 예시: 거래 총액 계산

주식 세 종목의 이틀간 주가와 거래량을 담은 두 개의 표가 있다고 가정해 보겠습니다.

- **주가 — 월요일:** $10, $12, $15 / **화요일:** $11, $13, $16
- **거래량 — 월요일:** 100, 150, 200 / **화요일:** 120, 170, 220

각 종목의 하루 거래 총액은 일반 행렬 곱셈이 아니라 같은 위치의 셀끼리 곱한 값입니다.

- **월요일:** ($10 * 100), ($12 * 150), ($15 * 200)
- **화요일:** ($11 * 120), ($13 * 170), ($16 * 220)

이 결과 표가 두 표의 아다마르 곱입니다.

## 응용 분야

1. **영상 처리:** 마스크 행렬을 픽셀 값에 원소별로 곱해 영상의 특정 영역을 남기거나 가립니다.
2. **기계 학습:** 신경망의 게이트 연산(LSTM 등)과 대규모 데이터의 원소별 연산에 쓰입니다.
3. **신호 처리:** 주파수 영역에서 성분별로 곱하여 신호를 필터링합니다.
4. **영지식 증명:** 영지식 증명 시스템은 증명할 계산을 벡터 사이의 관계로 표현합니다. Groth16 등에서 쓰는 R1CS(Rank-1 Constraint System)는 모든 제약을 Az ⊙ Bz = Cz 형태로 적으며, 여기서 ⊙가 아다마르 곱입니다. Bulletproofs 범위 증명에서도 값의 비트 벡터 aL과 aR = aL − 1에 대해 aL ⊙ aR = 0을 증명해, 각 원소가 0 또는 1이라는 사실을 한 번에 보입니다.

결론적으로 아다마르 곱은 같은 위치의 원소끼리 곱하는 간단한 연산으로, 행렬 계산과 데이터 처리, 암호학의 증명 시스템에서 폭넓게 쓰입니다.

---
출처: https://achivx.kr/glossary/hadamard-%EC%95%84%EB%8B%A4%EB%A7%88%EB%A5%B4/ · ACHIVX 용어 사전 · 수정일 2026-10-20
