np.digitize函数详解

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

np.digitize 是 NumPy 库中的一个函数,用于将输入数组的元素归入指定的区间(bins)中。它根据输入的数组和区间界限,返回一个与输入数组形状类似的数组,此中每个元素都被赋予一个区间标签,表现该元素属于哪个区间。
np.digitize 函数的语法

  1. 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)。
示例说明


  • 简单的分类示例
    1. import numpy as np
    2. x = [0.2, 6.4, 3.0, 1.6]
    3. bins = [0.0, 1.0, 2.5, 4.0, 6.0]
    4. indices = np.digitize(x, bins)
    5. 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。


  • 改变区间包罗方式
    1. indices_right = np.digitize(x, bins, right=True)
    2. 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。


  • 逆序区间的分类
    1. x = [0.2, 6.4, 3.0, 1.6]
    2. bins = [6.0, 4.0, 2.5, 1.0, 0.0]
    3. indices = np.digitize(x, bins)
    4. 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 参数的设置,确保数据根据需求正确划分到相应的区间中。
通过这个函数,我们可以轻松地将数据分段处理,这在数据分析和可视化中非常有用。
笔者程度有限,如有不对的地方接待品评指正!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表