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

Python中带广播的逐元素多维矩阵乘法高效实现方法

高效实现不同尺寸数组的逐元素广播乘法

你可以直接利用NumPy的广播机制来实现,不需要repeat这类会复制数据的操作,效率更高。核心思路是给两个数组添加合适的维度,让它们能通过广播对齐后逐元素相乘:

import numpy as np

a = np.arange(24).reshape((2,12))
b = np.arange(36).reshape((3,12))

# 给a增加第2个维度(变成(2,1,12)),给b增加第1个维度(变成(1,3,12))
c = a[:, np.newaxis, :] * b[np.newaxis, :, :]

运行这段代码得到的结果和你原来的实现完全一致,但步骤更简洁,且内存效率更高——因为广播不会像repeat那样创建额外的数组副本,只是在计算时虚拟扩展维度。

原理说明

  • a[:, np.newaxis, :] 将原形状(2,12)的数组转换为(2,1,12)
  • b[np.newaxis, :, :] 将原形状(3,12)的数组转换为(1,3,12)
  • 广播会自动将这两个数组扩展为(2,3,12)的形状(a的第2维度从1扩展到3,b的第1维度从1扩展到2),之后逐元素相乘就得到了你需要的结果。

性能对比

你的原方法中repeat会实际复制数据,当数组规模较大时,内存占用和计算时间都会显著增加;而基于广播的方法完全避免了不必要的数据复制,是NumPy处理这类维度扩展运算的标准高效方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:05:36