在 Python 中,@
符号是 矩阵乘法运算符,由 NumPy 引入(Python 3.5+ 支持)。它与 np.matmul
函数等价,但语法更简洁。以下是关键点解读和示例分析:
一维数组的点积:
-
当操作两个一维数组时,
@
计算它们的点积(对应元素相乘后求和)。
a = np.array([1, 2])
b = np.array([3, 4])
print(a @ b) # 输出 1*3 + 2*4 = 11
二维数组乘法:
-
当操作两个二维数组(矩阵)时,
@
执行标准的矩阵乘法。
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A @ B) # 输出 [[19 22], [43 50]]
高维数组的广播规则:
-
对于高维数组(如三维),
@
会按最后一个维度与倒数第二个维度进行矩阵乘法,其他维度需满足广播规则。
import numpy as np
# 使用 NumPy 数组
a = np.array([1.1])
b = np.array([2.0])
result = a @ b # 或 np.matmul(a, b)
print(f'1.1 * 2: {result}') # 输出 [2.2]
a = np.array([1])
b = np.array([2])
result = a @ b # 或 np.matmul(a, b)
print(f'1 * 2: {result}') # 输出 2
a = np.array([1])
b = np.array([0])
result = a @ b # 或 np.matmul(a, b)
print(f'1 * 0: {result}') # 输出 0
a = np.array([0])
b = np.array([0])
result = a @ b # 或 np.matmul(a, b)
print(f'0 * 0: {result}') # 0
@
vs *
vs np.dot
:
运算符/函数 | 行为 |
---|---|
@ 或 np.matmul | 矩阵乘法(支持 高维广播) |
* | 元素级乘法(逐元素相乘,需形状相同) |
np.dot | 点积或广义矩阵乘法(行为取决于输入维度,与 @ 有时不同) |
总结:
-
@
是 NumPy 中执行矩阵乘法的简洁运算符,优先使用它替代np.matmul
。 -
对于一维数组,它等同于点积;对于二维及以上数组,遵循矩阵乘法规则。
-
注意示例中的数值可能存在问题,建议检查输入数据。