矩阵相乘
在 Python 中,数组相乘有多种方式,取决于你想要实现的是元素级别的相乘还是矩阵乘法。这两种操作在数学和数据科学中有本质区别。
1. 元素级别相乘 (Element-wise Multiplication)
这是最常见的数组相乘方式,它将两个形状相同的数组的对应位置的元素相乘,然后生成一个新的数组。
使用 * 运算符
在 NumPy 中,使用 * 运算符可以很方便地实现元素级别相乘。
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 两个数组形状相同
element_wise_product = arr1 * arr2
print(element_wise_product)
# 输出: [ 4 10 18]
# 1*4=4, 2*5=10, 3*6=18
这同样适用于多维数组:
matrix1 = np.array([[1, 2],
[3, 4]])
matrix2 = np.array([[5, 6],
[7, 8]])
element_wise_product_2d = matrix1 * matrix2
print(element_wise_product_2d)
# 输出:
# [[ 5 12]
# [21 32]]
2. 矩阵乘法 (Matrix Multiplication)
矩阵乘法是一种更复杂的数学运算,它的规则是:第一个矩阵的行与第二个矩阵的列进行点积。
注意:
- 只有当第一个矩阵的列数等于第二个矩阵的行数时,矩阵乘法才能进行。
- 结果矩阵的形状将是
(第一个矩阵的行数, 第二个矩阵的列数)。
使用 @ 运算符
在 Python 3.5 及更高版本中,使用 @ 运算符是执行矩阵乘法的标准方式。
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
matrix_product = A @ B
print(matrix_product)
# 输出:
# [[19 22]
# [43 50]]
计算过程:
- 结果矩阵的第一个元素
19是由A的第一行[1, 2]与B的第一列[5, 7]的点积得到的,即(1*5) + (2*7) = 5 + 14 = 19。 - 结果矩阵的第二个元素
22是由A的第一行[1, 2]与B的第二列[6, 8]的点积得到的,即(1*6) + (2*8) = 6 + 16 = 22。 - 以此类推。
使用 np.dot() 函数
np.dot() 是另一种执行矩阵乘法的常见方法,它的功能和 @ 运算符几乎相同。
matrix_product_dot = np.dot(A, B)
print(matrix_product_dot)
# 输出:
# [[19 22]
# [43 50]]
总结
| 乘法类型 | 运算符/函数 | 描述 | 应用场景 |
|---|---|---|---|
| 元素级别相乘 | * |
对应位置的元素相乘。 | 数据预处理、特征缩放等。 |
| 矩阵乘法 | @ 或 np.dot() |
矩阵的行与列的点积。 | 线性代数、神经网络中的权重计算等。 |
在进行数组相乘时,一定要分清这两种操作的区别,因为它们的结果和应用场景完全不同。

浙公网安备 33010602011771号