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

np.where返回正确结果却触发RuntimeWarning,原因何在?

为啥会出现这个警告?

关键在np.where的运行逻辑

别被掩码迷惑,np.where(condition, x, y)可不是只算掩码覆盖的部分——它会先把x和y对应的整个数组全算完,再根据掩码挑值。

对应到你的代码看

第二次执行a = np.where(bool_2, np.sqrt(a), a)的时候:

  • 这时候a已经变成[1., 4., -3.]了
  • 不管bool_2只选中前两个元素,np.sqrt(a)会先对整个数组计算,也就是硬算sqrt(-3),这在实数数组里属于无效操作,直接触发警告
  • 虽然最后第三个元素的无效结果不会被选进最终的a,但计算过程已经发生,警告拦不住。

怎么解决?

要是不想看到警告,直接针对掩码选中的元素单独处理就行:

a[bool_2] = np.sqrt(a[bool_2])

这样只会给符合bool_2条件的元素开平方,根本碰不到那个负数,自然就没警告了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:20:58