如何在NumPy中实现矩阵与向量的逐行对应元素相除?
高效实现numpy矩阵每行除以对应向量元素
要实现n×n矩阵p的每一行p[i,:]除以n×1向量q的对应元素q[i],无需低效的Python循环,利用numpy的广播机制就能高效完成,以下是几种常用方法:
调整向量维度后直接除法
把向量q转换为列向量形状(n×1),numpy会自动通过广播匹配矩阵p的维度,实现每行元素除以对应标量:import numpy as np # 示例数据 n = 3 p = np.array([[1,2,3], [4,5,6], [7,8,9]]) q = np.array([2, 3, 4]) # 一维向量,或已为n×1的列向量 # 方法1:用reshape转换维度 result = p / q.reshape(-1, 1) # 方法2:用[:, np.newaxis]新增维度 result = p / q[:, np.newaxis] # 若q已是n×1列向量,直接除法即可 q_col = np.array([[2], [3], [4]]) result = p / q_col使用
np.expand_dims扩展维度
和上面的方法原理一致,用np.expand_dims明确为q添加第二个维度:result = np.divide(p, np.expand_dims(q, axis=1))转置后除法再转置(可选)
另一种思路是先转置矩阵,让列对应原矩阵的行,除以q后再转置回来,效果相同:result = (p.T / q).T
原理说明
numpy的广播规则会自动将低维度数组扩展为匹配高维度数组的形状:当q是n×1的列向量时,它会被扩展为n×n的矩阵(每行都是q[i]的重复),此时和p逐元素相除,就等价于p的每一行除以q[i]。这些操作都是numpy内部的C级实现,效率远高于Python循环,适合大n的场景。
内容的提问来源于stack exchange,提问作者Albannach5446
相关产品推荐
相关产品推荐

