文章目录
- 一、多维数组
- 使用NumPy创建和操作多维数组
- 二、矩阵乘法
- 矩阵乘法的基本定义
- 计算 2x2 矩阵的乘积
- 矩阵形状的要求
- 特殊情况:矩阵与向量的乘积
- 三、神经网络中的矩阵乘法
- 神经网络的结构简介
- 矩阵乘法在神经网络中的应用
- 计算细节和NumPy的实现
一、多维数组
多维数组,简单来说,就是数字的集合,这些数字可以排成一列(一维数组)、一个矩阵(二维数组)、或更高维度的结构。
使用NumPy创建和操作多维数组
-
创建一维数组:
import numpy as np A = np.array([1, 2, 3, 4]) print(A) # [1 2 3 4]
-
查询数组维度:
np.ndim(A)
输出表示数组的维度,对于A来说输出为1,表示这是一个一维数组。
-
查询数组形状:
A.shape
输出为一个元组
(4,)
,表示数组有4个元素。shape
属性返回一个元组,表示数组在每个维度上的大小。 -
创建二维数组:
B = np.array([[1, 2], [3, 4], [5, 6]]) print(B) # [[1 2] # [3 4] # [5 6]] np.ndim(B) # 对于二维数组B,输出为2,表示这是一个二维数组。 B.shape # 输出为 (3, 2),表示这个数组有3行2列。
二、矩阵乘法
矩阵乘法的基本定义
矩阵乘法涉及两个矩阵:左矩阵
A
A
A 和右矩阵
B
B
B。计算结果是一个新的矩阵
C
C
C,其中的每个元素是通过
A
A
A 的行与
B
B
B 的列对应元素相乘后求和得到的。具体的计算方法可以表示为:
C
[
i
]
[
j
]
=
∑
k
(
A
[
i
]
[
k
]
×
B
[
k
]
[
j
]
)
C[i][j] = \sum_{k} (A[i][k] \times B[k][j])
C[i][j]=k∑(A[i][k]×B[k][j])
其中,
i
i
i 表示行索引,
j
j
j 表示列索引,
k
k
k 表示求和的索引。
计算 2x2 矩阵的乘积
考虑两个 2x2 的矩阵
A
A
A 和
B
B
B:
A
=
[
1
2
3
4
]
,
B
=
[
5
6
7
8
]
A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}
A=[1324],B=[5768]
使用 NumPy 库的 np.dot()
函数,我们可以得到矩阵
C
C
C:
C
=
[
19
22
43
50
]
C = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}
C=[19432250]
这里,元素
C
[
0
]
[
0
]
C[0][0]
C[0][0] 的计算方式是:
C
[
0
]
[
0
]
=
1
×
5
+
2
×
7
=
19
C[0][0] = 1 \times 5 + 2 \times 7 = 19
C[0][0]=1×5+2×7=19
矩阵形状的要求
要实现矩阵乘法,矩阵 A A A 的列数必须与矩阵 B B B 的行数相等。如果这两个矩阵的维度不匹配,将导致计算错误。此外,还有一点很重要,就是运算结果的矩阵 C C C 的形状是由矩阵 A A A 的行数 和矩阵 B B B 的列数构成的。
特殊情况:矩阵与向量的乘积
当我们将矩阵与向量相乘时,同样遵循维度匹配的规则。
下面是个例子
import numpy as np
# 定义矩阵 A
A = np.array([[1, 2], [3, 4], [5, 6]])
# 定义向量 B
B = np.array([7, 8])
# 计算矩阵 A 和向量 B 的乘积
C = np.dot(A, B)
# 打印结果向量 C
print(C)
在这段代码中:
A
是一个 3x2 的矩阵。B
是一个长度为 2 的向量。- 使用
np.dot()
函数计算 A A A 和 B B B 的点积,结果是一个长度为 3 的向量 C C C。
C = [ 23 53 83 ] C = \begin{bmatrix} 23 \\ 53 \\ 83 \end{bmatrix} C= 235383
三、神经网络中的矩阵乘法
神经网络的结构简介
考虑一个简单的神经网络,它包括两个输入节点和三个输出节点,如图所示
这个网络的结构可以通过以下的矩阵
X
X
X(输入)和
W
W
W(权重)来表示:
X
=
[
1
2
]
,
W
=
[
1
3
5
2
4
6
]
X = \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \quad W = \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix}
X=[12],W=[123456]
这里,
X
X
X 是一个 2x1 的列向量,代表输入层的节点,而
W
W
W 是一个 2x3 的矩阵,代表从每个输入节点到输出节点的权重。
矩阵乘法在神经网络中的应用
在神经网络中,下一层的输出
Y
Y
Y 可以通过当前层的输入
X
X
X 和权重
W
W
W 的矩阵乘积来计算:
Y
=
X
T
W
=
[
1
2
]
[
1
3
5
2
4
6
]
=
[
5
11
17
]
Y = X^T W = \begin{bmatrix} 1 & 2 \end{bmatrix} \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix} = \begin{bmatrix} 5 & 11 & 17 \end{bmatrix}
Y=XTW=[12][123456]=[51117]
这里,
X
T
X^T
XT 表示
X
X
X 的转置,使得其维度与
W
W
W 相匹配,从而可以执行矩阵乘法。
计算细节和NumPy的实现
使用 NumPy 库可以简洁地实现这种类型的矩阵乘法。
import numpy as np
# 定义输入向量 X
X = np.array([1, 2])
# 定义权重矩阵 W
W = np.array([[1, 3, 5], [2, 4, 6]])
# 计算输出向量 Y
Y = np.dot(X, W)
print(Y) # 输出: [5 11 17]