1 普通乘积(matmul product)
若
A
A
A 是
m
×
n
m \times n
m×n 矩阵,
B
B
B 是
n
×
p
n \times p
n×p 矩阵,
B
B
B 的列是
b
1
,
⋯
,
b
p
b_1, \cdots, b_p
b1,⋯,bp,则乘积
A
B
AB
AB 是
m
×
p
m \times p
m×p 矩阵,它的各列是
A
b
1
,
⋯
,
A
b
p
Ab_1, \cdots, Ab_p
Ab1,⋯,Abp,即
A
B
=
A
[
b
1
b
2
⋯
b
p
]
=
[
A
b
1
A
b
2
⋯
A
b
p
]
AB = A[b_1 \quad b_2 \quad \cdots \quad b_p] = [Ab_1 \quad Ab_2 \quad \cdots \quad Ab_p]
AB=A[b1b2⋯bp]=[Ab1Ab2⋯Abp]
提示: 线性变换可以用矩阵来表示,而矩阵乘法对应线性变换的复合。
计算
A
B
AB
AB 的行列法则
若乘积
A
B
AB
AB 有定义,
A
B
AB
AB 的第
i
i
i 行第
j
j
j 列的元素是
A
A
A 的第
i
i
i行与
B
B
B 的第
j
j
j 列对应元素乘积之和。若
(
A
B
)
i
j
(AB)_{ij}
(AB)ij 表示
A
B
AB
AB 的
(
i
,
j
)
(i ,j)
(i,j) 元素,
A
A
A 为
m
×
n
m \times n
m×n 矩阵,则
(
A
B
)
i
j
=
∑
k
=
1
n
a
i
k
b
k
j
=
a
i
1
b
1
j
+
a
i
2
b
2
j
+
⋯
+
a
i
n
b
n
j
(AB)_{ij} = \sum_{k=1}^{n}a_{ik}b_{kj}= a_{i1}b_{1j} + a_{i2}b_{2j} + \cdots + a_{in}b_{nj}
(AB)ij=k=1∑naikbkj=ai1b1j+ai2b2j+⋯+ainbnj
下面用图片做演示:
2 哈达玛积(Hadamard product)
Hadamard乘积 是矩阵的一类运算,对形状相同的矩阵进行运算,并产生相同维度的第三个矩阵。在数学中,Hadamard
乘积(也称为 Schur
乘积或逐元素乘积)是一种二元运算,它用两个具有相同维数的矩阵产生另一个具有相同维数的矩阵,其中每个元素
(
i
,
j
)
(i, j)
(i,j) 是原始两个矩阵的元素
(
i
,
j
)
(i, j)
(i,j) 的乘积。它是由法国数学家雅克·哈达玛(Jacques Hadamard)或德国数学家Issai Schur命名的。
两个同阶的
m
×
n
m \times n
m×n 矩阵
A
=
[
a
i
j
]
A = [a_{ij}]
A=[aij] 与矩阵
B
=
[
b
i
j
]
B = [b_{ij}]
B=[bij] 的Hadamard
积,记为
A
⊙
B
A \odot B
A⊙B。新矩阵元素定义为矩阵A、B对应元素的乘积,即
(
A
⊙
B
)
i
j
=
a
i
j
∗
b
i
j
(A \odot B{)_{ij}} = {a_{ij}}*{b_{ij}}
(A⊙B)ij=aij∗bij
3 克罗内克积(Kronecker Product)
Kronecker 积 是两个任意大小矩阵间的运算,表示为
A
⊗
B
A \otimes B
A⊗B。如果
A
A
A 是一个
m
×
n
m \times n
m×n 的矩阵,而
B
B
B 是一个
p
×
q
p \times q
p×q 的矩阵,克罗内克积则是一个
m
p
×
n
q
mp \times nq
mp×nq 的分块矩阵。克罗内克积也称为直积或张量积,以德国数学家利奥波德·克罗内克命名。计算过程如下:
A
⊗
B
=
[
a
11
B
⋯
a
1
n
B
⋮
⋱
⋮
a
m
1
B
⋯
a
m
n
B
]
A\otimes B=\begin{bmatrix}a_{11}B&\cdots&a_{1n}B\\\vdots&\ddots&\vdots\\a_{m1}B&\cdots&a_{mn}B\end{bmatrix}
A⊗B=⎣⎢⎡a11B⋮am1B⋯⋱⋯a1nB⋮amnB⎦⎥⎤
更具体地可表示为:
A
⊗
B
=
[
a
11
b
11
a
11
b
12
⋯
a
11
b
1
q
⋯
⋯
a
1
n
b
11
a
1
n
b
12
⋯
a
1
n
b
1
q
a
11
b
21
a
11
b
22
⋯
a
11
b
2
q
⋯
⋯
a
1
n
b
21
a
1
n
b
22
⋯
a
1
n
b
2
q
⋮
⋮
⋱
⋮
⋮
⋮
⋱
⋮
a
11
b
p
1
a
11
b
p
2
⋯
a
11
b
p
q
⋯
⋯
a
1
n
b
p
1
a
1
n
b
p
2
⋯
a
1
n
b
p
q
⋮
⋮
⋮
⋱
⋮
⋮
⋮
⋮
⋮
⋮
⋱
⋮
⋮
⋮
a
m
1
b
11
a
m
1
b
12
⋯
a
m
1
b
1
q
⋯
⋯
a
m
n
b
11
a
m
n
b
12
⋯
a
m
n
b
1
q
a
m
1
b
21
a
m
1
b
22
⋯
a
m
1
b
2
q
⋯
⋯
a
m
n
b
21
a
m
n
b
22
⋯
a
m
n
b
2
q
⋮
⋮
⋱
⋮
⋮
⋮
⋱
⋮
a
m
1
b
p
1
a
m
1
b
p
2
⋯
a
m
1
b
p
q
⋯
⋯
a
m
n
b
p
1
a
m
n
b
p
2
⋯
a
m
n
b
p
q
]
A\otimes B=\begin{bmatrix} a_{11}b_{11}&a_{11}b_{12}&\cdots&a_{11}b_{1q}& \cdots&\cdots&a_{1n}b_{11}&a_{1n}b_{12}&\cdots&a_{1n}b_{1q}\\ a_{11}b_{21}&a_{11}b_{22}&\cdots&a_{11}b_{2q}& \cdots&\cdots&a_{1n}b_{21}&a_{1n}b_{22}&\cdots&a_{1n}b_{2q}\\ \vdots&\vdots&\ddots&\vdots&&&\vdots&\vdots&\ddots&\vdots\\ a_{11}b_{p1}&a_{11}b_{p2}&\cdots&a_{11}b_{pq}& \cdots&\cdots&a_{1n}b_{p1}&a_{1n}b_{p2}&\cdots&a_{1n}b_{pq}\\ \vdots&\vdots&&\vdots&\ddots&&\vdots&\vdots&&\vdots\\ \vdots&\vdots&&\vdots&&\ddots&\vdots&\vdots&&\vdots\\ a_{m1}b_{11}&a_{m1}b_{12}&\cdots&a_{m1}b_{1q}& \cdots&\cdots&a_{mn}b_{11}&a_{mn}b_{12}&\cdots&a_{mn}b_{1q}\\ a_{m1}b_{21}&a_{m1}b_{22}&\cdots&a_{m1}b_{2q}& \cdots&\cdots&a_{mn}b_{21}&a_{mn}b_{22}&\cdots&a_{mn}b_{2q}\\ \vdots&\vdots&\ddots&\vdots&&&\vdots&\vdots&\ddots&\vdots\\ a_{m1}b_{p1}&a_{m1}b_{p2}&\cdots&a_{m1}b_{pq}& \cdots&\cdots&a_{mn}b_{p1}&a_{mn}b_{p2}&\cdots&a_{mn}b_{pq} \end{bmatrix}
A⊗B=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a11b11a11b21⋮a11bp1⋮⋮am1b11am1b21⋮am1bp1a11b12a11b22⋮a11bp2⋮⋮am1b12am1b22⋮am1bp2⋯⋯⋱⋯⋯⋯⋱⋯a11b1qa11b2q⋮a11bpq⋮⋮am1b1qam1b2q⋮am1bpq⋯⋯⋯⋱⋯⋯⋯⋯⋯⋯⋱⋯⋯⋯a1nb11a1nb21⋮a1nbp1⋮⋮amnb11amnb21⋮amnbp1a1nb12a1nb22⋮a1nbp2⋮⋮amnb12amnb22⋮amnbp2⋯⋯⋱⋯⋯⋯⋱⋯a1nb1qa1nb2q⋮a1nbpq⋮⋮amnb1qamnb2q⋮amnbpq⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
提示: 一个列向量乘以一个行向量称作向量的外积,外积是一种特殊的克罗内克积,结果是一个矩阵。
4 Python 实现
from numpy import array, array_equal, kron
A = array([[3, 1], [1, 3]])
B = array([[5, -1], [-1, 5]])
H = array([[15, -1], [-1, 15]])
AB = array([[14, 2], [2, 14]])
K = array([[15, -3, 5, -1], [-3, 15, -1, 5], [5, -1, 15, -3], [-1, 5, -3, 15]])
# Hadamard product
assert (array_equal(A * B, H))
# Ordinary matrix product
assert (array_equal(A @ B, AB))
# Kronecker Product
assert (array_equal(kron(A, B), K))
参考
- Hadamard Product:https://www.maixj.net/misc/hadamard-product-19256
- Hadamard product:https://www.johndcook.com/blog/2018/10/10/hadamard-product/
- 克罗内克积:https://wiki.mbalib.com/wiki/克罗内克积
- 矩阵乘法的定义:https://baijiahao.baidu.com/s?id=1676409898205090544&wfr=spider&for=pc