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

如何在不新增轴的情况下高效广播(n,m,k)与(n,m)数组的乘法?

无需显式新增轴实现numpy数组掩码乘法的方案

针对大数组内存不足的问题,你可以通过以下几种方式避免显式创建扩展轴的中间数组,同时实现相同的掩码效果:

  • 原地修改原数组(最省内存)
    直接在原数组a上进行乘法操作,不需要额外创建新数组b,能大幅节省内存:

    a *= a_msk[..., None]
    

    这里[..., None]和[:,:,np.newaxis]作用一致,但写法更简洁,而且它创建的是原数组的视图而非副本,本身几乎不占用额外内存。原地修改后,a直接变为掩码后的结果。

  • 使用np.einsum指定维度运算
    einsum可以通过维度标记直接实现不同维度数组的对应相乘,无需手动扩展轴,且内存效率较高:

    b = np.einsum('nmk,nm->nmk', a, a_msk)
    

    该方法会直接计算对应位置的乘积,避免了中间扩展数组的显式创建,适合需要保留原数组的场景。

  • 利用广播机制的隐式扩展
    numpy的广播机制会自动处理维度匹配,你也可以通过reshape调整掩码数组的形状,结合原地操作同样能节省内存:

    a *= a_msk.reshape(a_msk.shape + (1,))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:50:31