如何实现向量元素与矩阵对应行的逐元素相乘运算
运算实现方案
这个场景的需求是向量与矩阵的按行逐元素匹配相乘,可通过以下几种常用方式实现:
1. NumPy 实现
利用NumPy的广播机制,先把一维向量升维为(3, 1)的列向量,再和3×n矩阵做逐元素乘法即可,底层会自动完成广播匹配,不需要手动循环。
import numpy as np # 输入准备 vec = np.array([0, 1, 2]) # 示例为3×4矩阵,可替换为任意3×n尺寸的矩阵 mat = np.arange(12).reshape(3, 4) # 核心运算 result = vec[:, np.newaxis] * mat # 也可替换为 vec.reshape(-1, 1) * mat,效果完全一致
2. PyTorch 实现
和NumPy逻辑完全一致,通过给向量增加维度触发广播:
import torch vec = torch.tensor([0, 1, 2]) mat = torch.arange(12).reshape(3, 4) result = vec.unsqueeze(1) * mat
3. 纯Python原生实现(无第三方依赖)
如果不想引入数值计算库,直接通过列表推导式逐行处理即可:
vec = [0, 1, 2] # 示例3×4矩阵 mat = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ] result = [[v * num for num in row] for v, row in zip(vec, mat)]
小提示:广播机制的实现效率远高于手动遍历循环,处理大尺寸矩阵时优先选择NumPy/PyTorch的内置运算方案。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

