如何将多个NumPy样本与单个样本相乘并沿轴1行向求和?
NumPy样本相乘后沿轴求和实现方案
通用场景实现
针对N个D维样本(形状(N, D))与单个D维样本(形状(1, D))相乘后沿轴1求和的需求,有两种高效实现方式:
方法1:广播相乘 + 轴求和
利用NumPy的广播机制完成逐元素相乘,再沿特征轴(轴1)求和,通过keepdims=True维持结果的二维形状:import numpy as np # X为N个样本数组,y为单个样本数组 result = (X * y).sum(axis=1, keepdims=True)方法2:矩阵点积
该操作本质等价于矩阵点积:将单个样本转置为(D, 1)形状后,与N个样本数组做点积,直接得到(N, 1)的结果:result = X @ y.T
具体场景示例
针对形状为(10, 5)的样本数组与(1, 5)的单个样本,具体实现代码如下:
import numpy as np # 创建示例数据 X = np.random.rand(10, 5) # 10个样本,每个含5个特征 y = np.random.rand(1, 5) # 单个5维样本 # 方法1执行 result1 = (X * y).sum(axis=1, keepdims=True) print(result1.shape) # 输出:(10, 1) # 方法2执行 result2 = X @ y.T print(result2.shape) # 输出:(10, 1) # 验证两种方法结果一致性 print(np.allclose(result1, result2)) # 输出:True
内容的提问来源于stack exchange,提问作者Ben Arnao
相关产品推荐
相关产品推荐

