np.digitize
是 NumPy 库中的一个函数,用于将输入数组的元素归入指定的区间(bins)中。它根据输入的数组和区间边界,返回一个与输入数组形状相同的数组,其中每个元素都被赋予一个区间标签,表示该元素属于哪个区间。
np.digitize
函数的语法
numpy.digitize(x, bins, right=False)
参数说明
-
x
:需要分类的输入数组或列表。这个数组中的每个元素将被分配到指定的区间(bins)中。 -
bins
:定义区间边界的数组或列表。这个数组通常是单调递增的,但也可以是单调递减的。它定义了区间的边界值。 -
right
:布尔值,默认为False
。它决定区间是左开右闭[left, right)
还是左闭右开(left, right]
:- 当
right=False
时,区间是左闭右开[left, right)
,即包含左端点,但不包含右端点。 - 当
right=True
时,区间是左开右闭(left, right]
,即不包含左端点,但包含右端点。
- 当
返回值
返回一个与 x
形状相同的整数数组,其中每个元素的值表示 x
中相应元素所属的区间编号。编号从1开始。如果某个元素小于第一个区间的左端点,那么返回0;如果某个元素大于最后一个区间的右端点,那么返回 len(bins)
。
示例说明
-
简单的分类示例:
import numpy as np x = [0.2, 6.4, 3.0, 1.6] bins = [0.0, 1.0, 2.5, 4.0, 6.0] indices = np.digitize(x, bins) print(indices) # 输出:[1 5 3 2]
- 解释:
0.2
落在第一个区间[0.0, 1.0)
中,返回1。6.4
大于最后一个区间的右端点,返回len(bins)
,即5。3.0
落在第三个区间[2.5, 4.0)
中,返回3。1.6
落在第二个区间[1.0, 2.5)
中,返回2。
- 解释:
-
改变区间包含方式:
indices_right = np.digitize(x, bins, right=True) print(indices_right) # 输出:[1 5 3 1]
- 解释:
0.2
落在第一个区间(0.0, 1.0]
中,返回1。6.4
大于最后一个区间的右端点,返回len(bins)
,即5。3.0
落在第三个区间(2.5, 4.0]
中,返回3。1.6
落在第一个区间(0.0, 1.0]
中,因为right=True
时第一个区间右端点1.0是包含的,返回1。
- 解释:
-
逆序区间的分类:
x = [0.2, 6.4, 3.0, 1.6] bins = [6.0, 4.0, 2.5, 1.0, 0.0] indices = np.digitize(x, bins) print(indices) # 输出:[4 0 2 3]
- 解释:
0.2
落在第四个区间[1.0, 0.0)
中,返回4。6.4
大于第一个区间的右端点,返回0(因为大于第一个区间的右端点6.0
)。3.0
落在第二个区间[4.0, 2.5)
中,返回2。1.6
落在第三个区间[2.5, 1.0)
中,返回3。
- 解释:
总结
-
np.digitize
是一个非常实用的函数,能够帮助我们将数据划分到预定义的区间中,常用于数据分组、直方图计算和分位数计算等场景。 -
关键在于
bins
的定义及right
参数的设置,确保数据根据需求正确划分到相应的区间中。
通过这个函数,我们可以轻松地将数据分段处理,这在数据分析和可视化中非常有用。
笔者水平有限,若有不对的地方欢迎评论指正!