np.digitize函数详解

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

np.digitize 函数的语法

python 复制代码
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. 简单的分类示例

    python 复制代码
    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。
  2. 改变区间包含方式

    python 复制代码
    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。
  3. 逆序区间的分类

    python 复制代码
    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 参数的设置,确保数据根据需求正确划分到相应的区间中。

通过这个函数,我们可以轻松地将数据分段处理,这在数据分析和可视化中非常有用。

笔者水平有限,若有不对的地方欢迎评论指正!

相关推荐
W23035765739 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
网教盟人才服务平台9 小时前
“方班预备班盾立方人才培养计划”正式启动!
大数据·人工智能
芯智工坊10 小时前
第15章 Mosquitto生产环境部署实践
人工智能·mqtt·开源
菜菜艾10 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
不爱吃炸鸡柳10 小时前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
TDengine (老段)10 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
小真zzz10 小时前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
minji...10 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy123931021610 小时前
Python基于BERT的上下文纠错详解
开发语言·python·bert
GreenTea11 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端