当前位置: 首页 > news >正文

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.lqws.cn/news/579709.html

相关文章:

  • BUUCTF在线评测-练习场-WebCTF习题[MRCTF2020]你传你[特殊字符]呢1-flag获取、解析
  • 攻防世界-MISC-red_green
  • 障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
  • macos 使用 vllm 启动模型
  • 【数据分析】环境数据降维与聚类分析教程:从PCA到可视化
  • OpenCV CUDA模块设备层----计算向量的平方根函数sqrt
  • 【机器人】复现 HOV-SG 机器人导航 | 分层 开放词汇 | 3D 场景图
  • 极海G32R501双向数字电源解决方案 赋能AI服务器及电源应用创新
  • Android中Compose常用组件以及布局使用方法
  • 深入解析TCP:可靠传输的核心机制与实现逻辑
  • 首次使用“非英伟达”芯片!OpenAI租用谷歌TPU,降低推理计算成本
  • 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
  • (LeetCode 每日一题) 594. 最长和谐子序列 (哈希表)
  • redis相关内容以及安全知识
  • 开疆智能CCLinkIE转Canopen网关连接UV紫外灯配置案例
  • python包管理工具uv VS pip
  • iOS 接口频繁请求导致流量激增?抓包分析定位与修复全流程
  • 人工智能和云计算对金融未来的影响
  • 力扣 hot100 Day30
  • 键盘第一下无反应
  • Armbian 25.5.1 Noble Gnome 开启远程桌面功能
  • CMake中WIN32和CMAKE_HOST_WIN32的使用差异
  • Pytest pytest_runtest_makereport 钩子函数:测试失败信息收集与处理 —— Python 实践
  • (5)pytest-yield操作
  • Python量化金融:从数据到策略的工程实现
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • CH32H417 替代 Cypress FX3 及优势探讨
  • RF100:多领域目标检测基准数据集(猫脸码客第284期)
  • Ubuntu更换Home目录所在硬盘的过程
  • 多重性校正:临床试验统计的关键防线