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

numpy sum的out与where参数使用结果不符的问题排查

NumPy sum函数out与where参数使用问题解析

问题场景

现有两个数组:

import numpy as np
a = np.array([1, 4, 2])
b = np.array([1, 0, 2])

期望得到数组c:其中b等于0的位置初始值为-5,b不等于0的位置为a和b对应元素的和,预期结果为array([2, -5, 4])。

执行以下代码后:

c = np.sum([a, b], out=np.zeros_like(a)-5, where=b!=0, axis=0)

实际得到结果array([2, 0, 4]),不符合预期。

问题原因

你误解了np.sum中where参数的作用:where是用来控制哪些元素参与求和计算,而非控制out数组的初始值保留。当where条件为False时,sum会将该位置的计算结果设为0(求和的默认初始值),直接覆盖掉out数组中预先设置的-5。

解决方案

方案1:分步初始化+条件赋值

先将结果数组初始化为-5,再对满足条件的位置单独计算求和结果:

import numpy as np

a = np.array([1, 4, 2])
b = np.array([1, 0, 2])

# 初始化结果数组为-5
c = np.full_like(a, -5)
# 筛选出b不等于0的位置
mask = b != 0
# 对满足条件的位置计算a和b的和
c[mask] = np.sum([a, b], axis=0)[mask]

运行后得到array([2, -5, 4]),符合预期。

方案2:结合np.where直接构造结果

用np.where根据条件选择求和结果或初始值,更简洁:

c = np.where(b != 0, np.sum([a, b], axis=0), -5)

同样能得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:52:06