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

如何以NumPy风格实现不同形状矩阵的向量减法(替代for looping)

NumPy向量化实现矩阵逐行减法(替代循环)

原始定义与循环实现

首先给出原始矩阵定义:

import numpy as np

a = np.array([[1,2], [3,4], [5,6], [7,8]])  # 形状(4, 2),类型int32
b = np.array([[9,10], [11,12], [13,14]])    # 形状(3, 2),类型int32

原先通过循环实现的逻辑是:取b的每一行与a做减法,最终得到形状为(3, 4, 2)的结果c,循环代码如下:

c = []
for i in range(b.shape[0]):
    c.append(b[i] - a)
c = np.array(c)

向量化实现方案

利用NumPy的广播机制可以完全替代循环,借助底层C优化提升运算效率,以下是几种等价的实现方式:

方式1:使用np.newaxis扩展维度

给b增加一个中间维度(从(3,2)变为(3,1,2)),让其与a的(4,2)形状兼容,触发广播完成逐行减法:

c = b[:, np.newaxis, :] - a

方式2:使用np.expand_dims显式扩展维度

如果觉得np.newaxis不够直观,可以用np.expand_dims指定要扩展的轴:

c = np.expand_dims(b, axis=1) - a

方式3:使用None替代np.newaxis

在NumPy中None和np.newaxis功能完全等价,写法更简洁:

c = b[:, None, :] - a

原理说明

NumPy的广播机制会自动将低维数组的维度扩展,使其与高维数组的形状匹配:

  • 扩展后的b形状为(3,1,2),a的形状为(4,2)
  • 广播后两者都会被扩展为(3,4,2),随后执行元素级减法运算,最终得到与循环实现完全一致的结果。

内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:12