Python中如何对矩阵小数四舍五入取整,规避np.around等函数的偶数值偏向
Numpy非偏向性四舍五入的简洁实现
问题背景
现有np.around、np.rint和np.round三个Numpy内置取整函数默认使用银行家舍入规则(四舍六入五成偶),存在偶数偏向问题:例如2.5会被取整为2,3.5会被取整为4,不符合常规四舍五入需求。
需求为对小数数组执行通用四舍五入:所有数值满足>=x.5时取整为x+1,小于x.5时取整为x。
简洁Pythonic实现
针对你提供的非负浮点数组场景,最简洁的向量化实现为:
import numpy as np def round_common(arr): return np.floor(arr + 0.5)
效果验证
测试边界值:
test_arr = np.array([2.5, 3.5, 0.41666666, 0.5, 2.41666675, 2.5]) print(round_common(test_arr)) # 输出:[3. 4. 0. 1. 2. 3.] 完全符合预期
如果需要保留指定小数位的通用四舍五入,可调整为通用版本:
def round_common_with_precision(arr, decimals=0): multiplier = 10 ** decimals return np.floor(arr * multiplier + 0.5) / multiplier
扩展兼容(可选)
如果后续需要处理包含负值的数组,且需求为按绝对值规则四舍五入(例如-2.5取整为-2),可调整实现为:
def round_common_all(arr): return np.trunc(arr + np.copysign(0.5, arr))
内容的提问来源于stack exchange,提问作者banikr
相关产品推荐
相关产品推荐

