You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更优雅的方式实现NumPy矩阵行与对应标量的逐元素相乘?

无需循环实现矩阵行与对应标量的逐元素相乘

可以利用NumPy的广播机制实现,完全替代手动循环,代码更简洁高效:

import numpy as np

def normalise(matrix):
    norm_c = 1.0 / matrix.sum(axis=1)
    # 通过[:, np.newaxis]将一维向量转为列向量,触发广播
    matrix = matrix * norm_c[:, np.newaxis]
    return matrix

原理说明

norm_c是通过sum(axis=1)得到的一维数组(形状为(N,),N是矩阵行数),而原矩阵形状为(N,M)。通过[:, np.newaxis]将norm_c的形状转换为(N,1),此时NumPy会自动触发广播机制,将这个列向量扩展为(N,M)的维度,和原矩阵逐元素相乘,效果和循环每行相乘完全一致。

其他等价写法

除了[:, np.newaxis],还可以用以下方式调整维度:

  • 使用reshape:norm_c.reshape(-1, 1)
  • 使用np.expand_dims:np.expand_dims(norm_c, axis=1)

示例:

matrix = matrix * norm_c.reshape(-1, 1)

验证效果

测试代码:

test_matrix = np.array([[1,2,3], [4,5,6]])
print(normalise(test_matrix))

输出结果:

[[0.16666667 0.33333333 0.5       ]
 [0.26666667 0.33333333 0.4       ]]

内容的提问来源于stack exchange,提问作者Scolpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:20:36