python | numpy小记(四):理解 NumPy 中的 `np.round`:银行家舍入策略

python | numpy小记(四):理解 NumPy 中的 `np.round`:银行家舍入策略

    • 一、函数签名与参数说明
    • 二、“银行家舍入”策略
    • 三、基础示例
    • 四、与 Python 内建 `round` 的异同
    • 五、使用注意事项
    • 六、扩展用法:自定义舍入策略
    • 七、总结


在科学计算与数据处理的过程中,经常需要对浮点数做四舍五入操作。NumPy 提供的 np.round(别名 np.around)函数,能够非常方便地对数组或标量逐元素执行四舍五入,并支持灵活的参数设置。本文将从函数签名、核心参数、舍入规则、示例演示、与 Python 内建 round 的区别等多角度,带你深入理解并高效使用 np.round


一、函数签名与参数说明

numpy.round(a, decimals=0, out=None)
# 等价于
numpy.around(a, decimals=0, out=None)
  • a (array_like)
    输入数据:可以是 Python 标量(如 floatint)、列表,也可以是任意维度的 NumPy 数组。

  • decimals (int, 可正可负,默认 0)

    • 0:舍入到最接近的整数
    • 正整数 n:保留小数点后 n
    • 负整数 -n:小数点左移 n 位后舍入(如 -1 表示十位取整,-2 表示百位取整)
  • out (ndarray, 可选)
    指定一个预先分配好的数组,用于就地存放结果;若不提供,则返回一个新数组。


二、“银行家舍入”策略

NumPy 的 np.round 遵循“银行家舍入”(Round half to even)规则:

  • 当待舍入值正好落在两个可表示数的中点(如 2.5−1.5)时,“舍入到偶数”那一侧:

    np.round(2.5)    # → 2.0 (2 是偶数)
    np.round(3.5)    # → 4.0 (4 是偶数)
    np.round(-1.5)   # → -2.0
    
  • 对于其他不在中点的值,则执行常规的“四舍五入”:

    np.round(2.49)   # → 2.0
    np.round(2.51)   # → 3.0
    

这种策略能够在大批量运算中减少结果的系统偏向,有助于提高数值稳定性。


三、基础示例

  1. 对标量取整

    import numpy as npprint(np.round(3.14159))      # 3.0
    print(np.round(-2.71828, 2))  # -2.72
    print(np.round(15.0, -1))     # 20.0  (十位取整)
    
  2. 对一维数组四舍五入

    arr = np.array([0.1234, 1.5678, 2.5, -1.5])
    # 保留两位小数
    print(np.round(arr, 2))
    # 输出: [ 0.12  1.57  2.   -2.  ]
    
  3. 对多维数组 + 负 decimals

    mat = np.array([[12.3, 45.6],[78.9, 10.1]])
    # 十位取整
    print(np.round(mat, -1))
    # 输出:
    # [[10. 50.]
    #  [80. 10.]]
    
  4. 就地更新(使用 out

    data = np.array([1.234, 2.345, 3.456])
    np.round(data, 1, out=data)
    print(data)  # [1.2 2.3 3.5]
    

四、与 Python 内建 round 的异同

比较项内建 round(x, n)np.round(a, n)
支持类型单个数值(float/int支持标量与数组 (ndarray)
舍入规则“银行家舍入”“银行家舍入”
批量操作需使用列表/推导显式循环自动对数组中每个元素逐一舍入,支持广播与 out
性能逐个调用,数组处理需显式 Python 循环,性能较低底层 C 实现,支持向量化,高效处理大规模数据

五、使用注意事项

  1. 浮点精度噪声
    由于浮点二进制表示的限制,某些十进制小数无法完美存储,四舍五入后可能出现 0.15000000000000002 之类的细微偏差。

  2. 整数输入
    如果输入数组为整数类型,NumPy 会先将其转换为 float64 再进行舍入。

  3. 负零 (-0.0)
    对负数做四舍五入可能产生 -0.0,但在数值比较时与 0.0 等价。


六、扩展用法:自定义舍入策略

如果需要其他类型的舍入策略(如“总是向上”、“总是向下”),可以结合 NumPy 的 np.floornp.ceil 进行实现:

# 向下取整
floored = np.floor(arr)# 向上取整
ceiled = np.ceil(arr)# 自定义“四舍六入”:先加 0.1,再 round
custom = np.round(arr + 0.1)

七、总结

  • np.round 是 NumPy 中对标量与数组进行批量四舍五入的主要接口,支持保留任意小数位与负位移舍入。
  • 默认采用“银行家舍入”策略,可以降低大规模运算的偏差积累。
  • 通过 decimalsout 参数,可以灵活控制舍入精度与就地更新行为。
  • 对于特殊舍入需求,还可配合 np.floornp.ceil 等函数实现定制化策略。

希望这篇博客能帮助你彻底掌握 np.round 的原理与用法,在日常数据处理与科学计算中游刃有余。如果你有更多心得或疑问,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86873.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本定时执行收集Oracle大表的日分区及创建分区本地索引

近期业务上了一张大表,每日新增分区,每日分区数据量为3千万行。根据每日分区创建分区本地索引。同事添加定时收集前一日每日分区统计信息。 1、创建分区本地索引 (分区索引数量需要和分区name数量一致) create index nmld.add_event_occur_time on nmld.esa_event (occur…

使用 Spread.net将 Excel 中的文本拆分为多段

引言: 在 .NET 应用程序中处理 Excel 数据时,常常会碰到需要把文本拆分成多段的情况。例如在数据清洗、数据分析等场景下,将长文本按照特定规则拆分为多段能让数据更便于处理和分析。Spread.NET作为一款强大的 .NET 电子表格组件&#xff0c…

QT实现一个三轴位移台的控制界面

文章目录 0 引入1、圆形转盘2、其他3、引用 0 引入 本来想做一个酷炫的3D位移台控制程序,要有一个类似遥控器手柄那种界面,在网上找了半天也没有,想要有那种效果还要用异性按钮做,迫在眉睫的情况下,使用了自己的方法&…

Java 案例 6 - 数组篇(基础)

数组的平均值、最大(小)值。数组的反转 需求:开发一个程序。假设班级有8名学生,用户可以录入8名学生的Java成绩,成绩类型是小数,并输出平均分,最高分和最低分。 import java.util.Scanner; …

Java外观模式实现方式与测试方法

一、外观模式的实现方式 外观模式的核心是通过封装复杂子系统的调用逻辑,为客户端提供一个统一的简单接口。以下是实现步骤及示例: 定义子系统类 子系统类负责实现具体功能,与外观类解耦。例如,家庭影院系统中的投影仪、音响等组…

《解锁AudioSet:开启音频分析的无限可能》

音频新时代的 “密钥”:AudioSet 登场 在科技飞速发展的今天,音频作为信息传播与交互的关键媒介,早已渗透到现代科技的各个角落。从智能手机中的语音助手,让我们通过简单的语音指令就能查询信息、发送消息,到智能家居系…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ThemeClock(主题时钟)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— ThemeClock组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 语法结…

直播预告丨聊聊Milvus 2.6新功能及背后的开发故事

7 月 1 日晚上 20:00-21:00&#xff0c;Zilliz 视频号直播间&#xff0c;Zilliz 合伙人和研发VP 栾小凡将带来《一步到位&#xff0c;详解 Milvus 2.6 新功能》的分享&#xff0c;带你拆解 Milvus 2.6 四大突破&#xff1a; 降本增效的底层架构开发者生产力拉满的新功能性能不打…

pyenv-win 配置指南​

在 Python 开发过程中&#xff0c;经常会遇到需要使用不同版本 Python 的情况。比如&#xff0c;旧项目依赖某个特定的 Python 版本&#xff0c;而新项目则要求使用更新的版本。这时&#xff0c;版本管理工具就显得尤为重要。pyenv-win就是一款专门为 Windows 系统设计的 Pytho…

MongoDB 常见查询语法与命令详解

MongoDB 作为文档型数据库&#xff0c;其查询语言基于 BSON&#xff08;二进制 JSON&#xff09;格式&#xff0c;与传统关系型数据库的 SQL 语法有较大差异。 一、基本查询命令 1. find()&#xff1a;查询文档 语法&#xff1a;db.collection.find(查询条件, 投影)示例&…

AlpineLinux安装docker

或许你在docker中使用 Alpine Linux 的镜像使用得多,但是有没有想过在 Alpine Linux 上安装 Docker 来使用呢?默认情况下,Docker 包位于社区仓库中,因此在使用包管理来安装docker之前建议更换为国内源,并开启社区仓库的链接。 下面的操作是在root用户下运行的,如果要使用…

docker安装gitlab并配置ssl证书

本篇安装环境 Docker版本&#xff1a;Docker version 28.3.0 域名&#xff1a;test.disallow.cn 自签证书&#xff1a;/etc/gitlab/ssl&#xff08;已经存放在该目录&#xff09; 一、拉取镜像 docker run -itd \--privilegedtrue \--hostname gitlab.test.disallow.cn \--p…

Java开发者转型AI时代的路径

Java开发者转型AI时代的路径 引言 随着人工智能技术的飞速发展&#xff0c;AI已不再是遥不可及的未来&#xff0c;而是深刻影响着各行各业的当下。对于Java开发者而言&#xff0c;面对AI浪潮&#xff0c;如何顺势而为&#xff0c;实现职业转型与技能升级&#xff0c;成为摆在…

QT6 源(140)模型视图架构里的视图总基类 QAbstractItemView:

&#xff08;1&#xff09;先给出本类的继承关系 &#xff1a; &#xff08;2&#xff09;Qt 已经预先为视图定义了键盘功能&#xff0c;Qt 大师们通过编程&#xff0c;已经完善了视图对键盘的响应操作 &#xff1a; &#xff08;3&#xff09;因为本类是抽象基类&#xff0c;无…

vue上传各种文件,并预览组件,(预览,下载),下载resources目录下文件

前端组件vue 最终效果 <template><div ><div class"file-list" v-if"existingFiles.length > 0"><div class"file-card" v-for"(file, index) in existingFiles" :key"file.id"><div clas…

【CS创世SD NAND征文】SD NAND赋能新一代儿童智能玩具

基于全志F1C100S的高可靠存储方案 文章目录 基于全志F1C100S的高可靠存储方案[toc]前言 一、应用产品介绍&#xff1a;儿童智能玩具的需求演变二、技术方案介绍&#xff1a;构建智能玩具的"大脑"与"记忆库"三、核心技术模块分析3.1 主控芯片&#xff1a;全…

mac触摸板设置右键

在 Mac 笔记本上&#xff0c;触摸板默认没有物理左右键分区&#xff0c;但可以通过以下方式实现“右键”功能&#xff08;称为 辅助点按&#xff09;&#xff1a; 一、启用与使用右键&#xff08;辅助点按&#xff09; 步骤1&#xff1a;检查系统设置 点击屏幕左上角 &#x…

稳定币发行量创纪录地超过 Visa 交易量

稳定币发行量创纪录地超过 Visa 交易量 稳定币的崛起正在重塑全球金融格局&#xff0c;华夏基金首席执行官甘天&#xff08;Gan Tian&#xff09;强调了稳定币的快速增长&#xff0c;并指出稳定币的交易量在短短五年内就超过了Visa 40年的交易量。这凸显了货币使用的转变。 稳…

编程 IDE 混战简史:从 Copilot 到 Claude Code,一场重塑开发方式的战争

unsetunset引言&#xff1a;开发新纪元的序幕unsetunset 编程世界&#xff0c;从最初依赖打孔卡和简陋的命令行工具&#xff0c;到如今功能琳琅满目的集成开发环境&#xff08;IDE&#xff09;&#xff0c;每一步都见证了效率与智能的飞跃。IDE作为开发者与代码交互的核心界面&…

软测八股--计算机网络

计算机网络基础 局域网广域网 局域网&#xff1a;一个区域内由多台计算机互联成的计算机组&#xff08;学校&#xff0c;办公室&#xff0c;公司/学校等&#xff09;。可以实现文件管理&#xff0c;应用软件管理&#xff0c;答应及管理&#xff0c;扫描仪共享等。是封闭的&am…