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

如何在避免除零错误的前提下,实现特征图与2D常量张量的维度匹配除法运算?

如何在避免除零错误的前提下,实现特征图与2D常量张量的维度匹配除法运算?

嘿,这个问题我做CV特征处理的时候也踩过坑!核心问题就是numpy的广播规则是从右往左对齐维度的,你的b张量形状是(4,3),numpy会默认把它当成在最前面补一个维度变成(1,4,3),这就和a的(4,3,3)维度对应不上了。不过解决起来超简单,只要给b扩展一个最后维度,让它能和a从右往左对齐就行,同时保留你原来的where条件避免除零错误。

给你两种实用的写法:

方法一:用np.expand_dims显式扩展维度

这种写法可读性强,适合刚接触numpy的朋友:

import numpy as np

a = np.random.rand(4, 3 ,3)
b = np.random.rand(4, 3)

# 给b在最后一个位置添加维度,形状从(4,3)变成(4,3,1)
b_expanded = np.expand_dims(b, axis=-1)
# 现在两个张量可以正常广播了,where条件也能正确过滤零值
c = np.divide(a, b_expanded, where=b_expanded > 0)

方法二:用[..., None]快速扩展维度

这是numpy老玩家常用的简洁写法,...代表前面所有维度,None相当于新增一个维度:

import numpy as np

a = np.random.rand(4, 3 ,3)
b = np.random.rand(4, 3)

# 一行搞定维度扩展和除法,where条件里直接用b>0也可以(因为扩展维度不改变元素值)
c = np.divide(a, b[..., None], where=b > 0)

为什么这样能行?当b变成(4,3,1)后,numpy会自动把这个长度为1的维度扩展到和a的最后一个维度(长度3)匹配,这样两个张量的每个位置元素就能正确对应做除法了,完全符合你想要的特征图每个通道都除以对应位置的2D常量的需求。

备注:内容来源于stack exchange,提问作者PuppyCat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:08:07