NumPy 中的取整函数
NumPy中的取整函数详解
NumPy 提供了多种取整函数,用于对数组中的元素进行不同类型的舍入操作。以下是主要的取整函数及其用法:
1. numpy.round()
/ numpy.around()
功能:四舍五入到指定的小数位数
import numpy as npa = np.array([1.234, 2.567, 3.789])
print(np.round(a, 2)) # 保留2位小数
# 输出: [1.23 2.57 3.79]print(np.round(a)) # 默认舍入到整数
# 输出: [1. 3. 4.]
如果需要传统四舍五入,可以手动实现:
2. numpy.floor()
功能:向下取整(返回不大于输入值的最大整数)
a = np.array([1.2, -1.7, 3.0])
print(np.floor(a))
# 输出: [ 1. -2. 3.]
3. numpy.ceil()
功能:向上取整(返回不小于输入值的最小整数)
a = np.array([1.2, -1.7, 3.0])
print(np.ceil(a))
# 输出: [ 2. -1. 3.]
4. numpy.trunc()
功能:截断小数部分(向零取整)
a = np.array([1.7, -1.7, 3.0])
print(np.trunc(a))
# 输出: [ 1. -1. 3.]
5. numpy.fix()
功能:与trunc()
类似,向零取整
a = np.array([1.7, -1.7, 3.0])
print(np.fix(a))
# 输出: [ 1. -1. 3.]
6. numpy.rint()
功能:四舍五入到最近的整数(与round()
类似,但不支持指定小数位数)
a = np.array([1.2, 1.5, 1.7])
print(np.rint(a))
# 输出: [1. 2. 2.]
7. numpy.modf()
功能:返回数组的小数和整数部分
a = np.array([1.2, 3.5, -2.7])
frac, int_part = np.modf(a)
print(frac) # 小数部分: [ 0.2 0.5 -0.7]
print(int_part) # 整数部分: [ 1. 3. -2.]
高级用法
1、处理复数
大多数取整函数也适用于复数,会对实部和虚部分别取整:
a = np.array([1.2 + 2.7j, 3.5 - 1.3j])
print(np.round(a))
# 输出: [1.+3.j 4.-1.j]
2、指定输出数组
可以指定输出数组来保存结果:
a = np.array([1.2, 2.7, 3.5])
result = np.empty_like(a)
np.floor(a, out=result)
print(result)
# 输出: [1. 2. 3.]
np.empty_like()
是 NumPy 中的一个函数,用于创建一个与输入数组a
形状和数据类型相同的新数组,但不初始化数组元素的值(即数组中的值是未定义的,可能是内存中的任意值)。
3、处理大数组
对于大数组,可以使用dtype
参数控制输出类型:
a = np.array([1.2, 2.7, 3.5], dtype=np.float32)
print(np.floor(a, dtype=np.float64))
# 输出: [1. 2. 3.] (但数据类型为float64)
例题
程序中的代码使用了 numpy.round()
函数对数组 [-1.5, 1.5]
进行四舍五入。numpy.round()
的规则是“四舍五入到最近的偶数”,因此:-1.5 会舍入到 -2.0,1.5 会舍入到 2.0。输出结果为:[-2. 2.]
当小数部分 恰好是 0.5 时,
numpy.round()
会舍入到最近的偶数(即“银行家舍入法”或“四舍六入五成双”)。
现在分析各选项:
A. np.floor(arr)。
floor
是向下取整:
- -1.5 → -2.0
- 1.5 → 1.0
输出:[-2. 1.]
(不匹配)
B. np.ceil(arr)
ceil
是向上取整:
- -1.5 → -1.0
- 1.5 → 2.0
输出:[-1. 2.]
(不匹配)
C. np.trunc(arr)
trunc
是向零截断:
- -1.5 → -1.0
- 1.5 → 1.0
输出:[-1. 1.]
(不匹配)
D. np.rint(arr)
rint
的功能与 round
相同,也是“四舍五入到最近的偶数”:
- -1.5 → -2.0
- 1.5 → 2.0
输出:[-2. 2.]
(匹配)
因此,正确答案是 D。