NumPy - 矩阵乘法
什么是矩阵乘法?
矩阵乘法是线性代数中的一种运算,涉及两个矩阵的相乘。它不是简单的逐元素乘法,而是遵循特定的数学规则。
在该运算中,第一个矩阵的行与第二个矩阵的列相乘,并将结果相加以形成一个新矩阵。
矩阵乘法在物理学、计算机图形学和机器学习等多个领域非常有用。它是变换和求解线性方程组的关键运算。
矩阵乘法的条件
在执行矩阵乘法之前,重要的是要确保两个矩阵满足某些条件 −
- 第一个矩阵的列数必须等于第二个矩阵的行数。
- 结果矩阵的维度将取自第一个矩阵的行数和第二个矩阵的列数。
例如,shape 为 (2, 3) 的矩阵可以与 shape 为 (3, 4) 的矩阵相乘,结果是一个 shape 为 (2, 4) 的矩阵。
矩阵乘法公式
矩阵乘法的公式如下 −
对于 shape 为 (m, n) 的矩阵 A 和 shape 为 (n, p) 的矩阵 B,结果矩阵 C 的 shape 为 (m, p),每个元素 cij 通过以下方式计算:
cij = (aik * bkj) where i = 1 to m, j = 1 to p, and k = 1 to n
NumPy 中的矩阵乘法
在 NumPy 中,可以使用多种方法进行矩阵乘法 −
- 使用 * 运算符: 该运算符可用于元素级乘法,但当应用于两个 2D array 时,也可用于矩阵乘法。
- 使用 @ 运算符(Python 3.5 及以上版本): @ 运算符专为矩阵乘法设计,使代码更简洁易懂。
- 使用 np.dot() function: 该 function 计算两个 array 的点积。对于 2D array,它执行矩阵乘法。
- 使用 np.matmul() function: 与 np.dot() function 类似,该 function 专为矩阵乘法设计。
NumPy 中矩阵乘法的示例
在这个示例中,我们将演示使用上述所有方法进行矩阵乘法 −
import numpy as np
# 定义两个矩阵
matrix_1 = np.array([[1, 2], [3, 4]])
matrix_2 = np.array([[5, 6], [7, 8]])
# 使用 * 进行矩阵乘法
result_1 = matrix_1 * matrix_2
# 使用 @ 进行矩阵乘法
result_2 = matrix_1 @ matrix_2
# 使用 np.dot() 进行矩阵乘法
result_3 = np.dot(matrix_1, matrix_2)
# 使用 np.matmul() 进行矩阵乘法
result_4 = np.matmul(matrix_1, matrix_2)
print("Matrix Multiplication (*):\n", result_1)
print("Matrix Multiplication (@):\n", result_2)
print("Matrix Multiplication (np.dot()):\n", result_3)
print("Matrix Multiplication (np.matmul()):\n", result_4)
以下是得到的结果 −
Matrix Multiplication (*): [[ 5 12] [21 32]] Matrix Multiplication (@): [[19 22] [43 50]] Matrix Multiplication (np.dot()): [[19 22] [43 50]] Matrix Multiplication (np.matmul()): [[19 22] [43 50]]
在上面的输出中,你会看到使用不同方法进行矩阵乘法的结果是相同的,但方法不同。以下是每个结果的含义 −
- Matrix Multiplication (*): 这执行元素级乘法,与矩阵乘法不同。它将两个矩阵的对应元素相乘。
- Matrix Multiplication (@): 这执行真正的矩阵乘法,遵循线性代数规则。它将第一个矩阵的行与第二个矩阵的列相乘。
- Matrix Multiplication (np.dot()): np.dot() function 计算两个矩阵的点积,对于 2D array 来说,等于矩阵乘法。
- Matrix Multiplication (np.matmul()): 该 function 的工作方式与 np.dot() 类似,但专为矩阵乘法设计。
使用更大矩阵的矩阵乘法
让我们考虑一个更大的示例,我们有形状为 (2, 3) 和 (3, 4) 的矩阵,并将它们相乘。结果矩阵的形状将是 (2, 4)。以下是代码 −
import numpy as np matrix_1 = np.array([[1, 2, 3], [4, 5, 6]]) matrix_2 = np.array([[7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]) result = np.matmul(matrix_1, matrix_2) print(result)
这里,结果矩阵的形状为 (2, 4),符合矩阵乘法的规则。
结果矩阵中的每个元素都是第一个矩阵的行与第二个矩阵的列对应元素的乘积之和。
[[ 74 80 86 92] [173 188 203 218]]
实际应用
矩阵乘法是各种实际应用中的核心操作 −
- 机器学习:在机器学习中,尤其是在神经网络中,矩阵乘法用于计算网络层中的激活值。网络的权重以矩阵形式表示,乘法有助于计算输出。
- 图形渲染:在计算机图形学中,矩阵乘法用于变换空间中的对象。将变换矩阵与对象的坐标相乘,以执行缩放、旋转或平移。
- 经济学:在经济学中,矩阵用于建模线性方程组,并求解优化问题,如供需模型。