深度学习的矩阵相乘引发的Bug,由此深刻学习这方面的相关知识
在Python中,特别是使用NumPy库时,元素相乘和矩阵相乘是处理数组和矩阵时的常见操作
元素相乘是指对两个相同形状的数组中的对应元素逐个相乘
multiply()函数可以实现这一操作,运算符*也可以用于元素相乘
import numpy as np
# 定义两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 元素相乘
result = np.multiply(a, b)
print("元素相乘的结果(使用multiply()):", result)
截图如下:

import numpy as np
# 定义两个数组
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
# 元素相乘
result = a * b
print("元素相乘的结果(使用*运算符):\n", result)
截图如下:

矩阵相乘遵循线性代数中的矩阵乘法规则,即结果矩阵的第(i, j)个元素是第一个矩阵的第i行与第二个矩阵的第j列对应元素的乘积之和
使用dot()函数、matmul()函数以及@运算符来进行矩阵相乘
dot():
import numpy as np
# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵相乘
result = np.dot(A, B)
print("矩阵相乘的结果(使用dot()):\n", result)
matmul():
import numpy as np
# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵相乘
result = np.matmul(A, B)
print("矩阵相乘的结果(使用matmul()):\n", result)
@:
import numpy as np
# 定义两个矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵相乘
result = A @ B
print("矩阵相乘的结果(使用@运算符):\n", result)
这三者截图都如下:

| 功能 | 函数/运算符 | 描述 |
|---|---|---|
| 元素相乘 | multiply() | NumPy中的元素级乘法函数,接受任意数量的数组参数,并将它们的对应元素逐个相乘 |
| *运算符 | 也用于元素级乘法,其行为与multiply()函数相同 | |
| 矩阵相乘 | dot() | 用于计算两个数组的点积(内积)。如果传入的参数是一维数组,则计算的是它们的标量积。如果传入的是二维数组(矩阵),则计算的是矩阵乘法 |
| matmul() | 用于执行矩阵乘法。不支持一维数组的点积,而是将它们视为行或列向量进行矩阵相乘 | |
| @运算符 | Python 3.5及更高版本引入的矩阵乘法运算符。用于执行矩阵乘法 |