0

0

避免 NumPy 中使用 where 时出现 RuntimeWarning

花韻仙語

花韻仙語

发布时间:2025-09-25 16:27:01

|

1050人浏览过

|

来源于php中文网

原创

避免 numpy 中使用 where 时出现 runtimewarning

本文旨在解决在使用 NumPy 进行数值计算时,由于除零或无效值而产生的 RuntimeWarning 问题。该问题通常在使用 np.where 函数结合自定义函数处理数组时出现。为了保证代码的健壮性和可读性,避免这些警告至关重要。本文提供了一种基于 np.divide 函数的解决方案,该方案在保证性能的同时,有效地避免了警告的产生。

在 NumPy 中,当执行除法运算时,如果除数为零,或者进行其他可能导致无效值的运算(例如,对负数取对数),就会触发 RuntimeWarning。虽然这些警告通常不会中断程序的执行,但它们表明可能存在潜在的数值问题,并且会降低代码的可读性。

考虑以下示例,该示例定义了一个 relu 函数,该函数在计算过程中会遇到除零的情况:

import numpy as np

def relu(x):
    odds = x / (1-x)
    lnex = np.log(np.exp(odds) + 1)
    return lnex / (lnex + 1)

x = np.linspace(0,1,10)
np.where(x==1,1,relu(x))

上述代码在计算结果正确的同时,会产生以下警告:

RuntimeWarning: divide by zero encountered in divide
RuntimeWarning: invalid value encountered in divide

为了避免这些警告,我们可以使用 np.divide 函数,并结合其 out 和 where 参数。np.divide 允许我们指定一个输出数组,并将除法运算的结果存储在该数组中。where 参数允许我们指定一个条件,只有当该条件为真时,才执行除法运算。

php商城系统
php商城系统

PHP商城系统是国内功能优秀的网上商城系统,同时也是一个商业的PHP开发框架,有多套免费模版,强大的后台管理功能,专业的网上商城系统解决方案,快速建设网上购物商城、数码商城、手机商城、办公用品商城等网站。 php商城系统v3.0 rc6升级 1、主要修复用户使用中出现的js未加载完报错问题,后台整改、以及后台栏目的全新部署、更利于用户体验。 2、扩展出,更多系统内部的功能,以便用户能够迅速找到需

下载

以下是修改后的代码:

import numpy as np

def relu(x):
    odds = np.divide(x, 1-x, out=np.zeros_like(x), where=x!=1)
    lnex = np.log(np.exp(odds) + 1)
    return lnex / (lnex + 1)

x = np.linspace(0,1,10)
np.where(x==1,1,relu(x))

在这个修改后的版本中,np.divide(x, 1-x, out=np.zeros_like(x), where=x!=1) 仅在 x != 1 时才执行除法运算。当 x == 1 时,out=np.zeros_like(x) 确保结果数组中的相应元素被设置为零,从而避免了除零错误。这样,我们就成功地避免了 RuntimeWarning,同时保持了代码的性能。

总结:

通过使用 np.divide 函数并结合 where 参数,我们可以优雅地处理 NumPy 数组运算中可能出现的除零或无效值情况。这种方法不仅避免了 RuntimeWarning,还提高了代码的健壮性和可读性。在处理大规模数值计算时,这种技巧尤为重要。在实际应用中,应根据具体情况选择合适的解决方案,并始终关注代码的性能和可维护性。

相关专题

更多
什么是低代码
什么是低代码

低代码是一种软件开发方法,使用预构建的组件可快速构建应用程序,无需大量编程。想了解更多低代码的相关内容,可以阅读本专题下面的文章。

284

2024.05.21

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

36

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

99

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

148

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

56

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

107

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育RHCE视频教程
誉天教育RHCE视频教程

共9课时 | 1.4万人学习

尚观Linux RHCE视频教程(二)
尚观Linux RHCE视频教程(二)

共34课时 | 5.7万人学习

尚观RHCE视频教程(一)
尚观RHCE视频教程(一)

共28课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号