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
英文地址,請注明出處:http://en.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…