在 NumPy 中,@ 符号表示矩阵乘法(也称为点积运算),遵循线性代数中的矩阵乘法规则。当二维数组与一维数组使用 @ 相乘时,会根据它们的形状触发不同的计算逻辑:
@
(m, n)
(n,)
(n, 1)
(m,)
(1, m)
(1, n)
.flatten()
import numpy as np # 创建一个 2×3 的二维数组(矩阵) arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) # 形状:(2, 3) # 1. 一维数组长度与二维数组的列数相同(3) vec_col = np.array([10, 20, 30]) # 形状:(3,),视为列向量 (3,1) result1 = arr_2d @ vec_col print("情况1:二维数组 @ 列向量(长度=列数)") print(f"结果形状:{result1.shape}") # 输出:(2,) print(f"结果值:{result1}") # 输出:[140 320] # 计算逻辑: # 第一行:1×10 + 2×20 + 3×30 = 140 # 第二行:4×10 + 5×20 + 6×30 = 320 # 2. 一维数组长度与二维数组的行数相同(2) vec_row = np.array([10, 20]) # 形状:(2,),需视为行向量 (1,2) # 先将一维数组转为行向量(通过 reshape(1, 2)) result2 = vec_row.reshape(1, 2) @ arr_2d print("\n情况2:行向量 @ 二维数组(长度=行数)") print(f"结果形状:{result2.shape}") # 输出:(1, 3) print(f"结果值:{result2}") # 输出:[[90 120 150]] print(f"转为一维:{result2.flatten()}") # 输出:[90 120 150] # 计算逻辑: # 第一列:10×1 + 20×4 = 90 # 第二列:10×2 + 20×5 = 120 # 第三列:10×3 + 20×6 = 150
*