NumPy 中文教程

第一部分:基础认知与环境准备
第 1 章 全面认识 NumPy
第 2 章 开发环境搭建与验证
第二部分:核心对象 ——ndarray 数组
第 3 章 ndarray 数组基础
第 4 章 数组的形状与维度操作
第四部分:高级应用与数据处理
第 8 章 数组的排序、查找与去重
第 9 章 缺失值与异常值处理
第 10 章 随机数生成与抽样
第 11 章 文件读写与数据交互
第五部分:实战场景与落地应用
第 12 章 数值计算实战
第 13 章 数据分析实战
第六部分:优化进阶与问题解决
第 14 章 NumPy 性能优化
第 15 章 NumPy 进阶扩展
第 16 章 常见问题与解决方案

8.2 查找与匹配

NumPy查找与匹配全面指南:条件查找、元素匹配与非零元素操作

NumPy 中文教程

本教程详细介绍了NumPy中的查找与匹配操作,包括条件查找(np.where和np.argwhere)、元素匹配(np.isin)、非零元素查找(np.nonzero)和最值位置查找(np.argmax和np.argmin)。提供简单易懂的示例和代码,适合NumPy初学者快速上手数据科学任务。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

NumPy查找与匹配教程

介绍

NumPy是Python中用于科学计算和数据分析的核心库,其数组操作功能强大。在处理数据时,查找满足条件的元素、匹配数组间的值或找到最值位置是常见任务。本教程将详细讲解NumPy中的查找与匹配函数,帮助新人轻松入门。

条件查找:np.where()和np.argwhere()

np.where()

np.where()函数用于根据条件查找元素的索引或替换元素。

  • 语法np.where(condition, x, y)np.where(condition)
    • 如果只提供condition,返回一个元组,包含满足条件的索引数组。
    • 如果提供xy,则根据condition选择xy的元素,返回新数组。
  • 示例
    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    indices = np.where(arr > 3)  # 条件查找索引
    print(indices)  # 输出 (array([3, 4]),)
    
    result = np.where(arr > 3, arr, -1)  # 条件替换
    print(result)  # 输出 [-1 -1 -1  4  5]
    
    解释:第一个例子返回索引元组,第二个例子将大于3的元素保留,否则替换为-1。

np.argwhere()

np.argwhere()函数返回满足条件的元素位置,以坐标形式表示。

  • 语法np.argwhere(condition)
    • 返回一个二维数组,每一行是一个满足条件的元素坐标。
  • 示例
    arr_2d = np.array([[1, 2], [3, 4], [5, 6]])
    indices = np.argwhere(arr_2d > 3)
    print(indices)  # 输出 [[1 1] [2 0] [2 1]]
    
    解释:坐标(1,1)对应值4,以此类推,适用于多维数组查找。

元素匹配:np.isin()和np.in1d()

np.isin()

np.isin()函数检查数组中的元素是否在另一个数组中,返回布尔值数组。

  • 语法np.isin(element_array, test_array)
    • 返回布尔数组,表示element_array中的元素是否在test_array中。
  • 示例
    arr1 = np.array([1, 2, 3, 4, 5])
    arr2 = np.array([2, 4])
    result = np.isin(arr1, arr2)
    print(result)  # 输出 [False  True False  True False]
    
    解释:元素2和4在arr2中,所以对应位置为True。

np.in1d()

np.in1d()np.isin()的前身,功能类似,但np.isin()更推荐使用,因为它支持多维数组。np.in1d()只用于一维数组。

  • 示例
    result_in1d = np.in1d(arr1, arr2)
    print(result_in1d)  # 输出 [False  True False  True False]
    
    注意:对于新人,优先学习np.isin(),它更通用。

非零元素查找:np.nonzero()

np.nonzero()函数返回数组中非零元素的索引。

  • 语法np.nonzero(array)
    • 返回一个元组,每个元素是一个维度上的索引数组。
  • 示例
    arr = np.array([0, 1, 0, 2, 0, 3])
    indices = np.nonzero(arr)
    print(indices)  # 输出 (array([1, 3, 5]),)
    
    解释:对于一维数组,返回一个元组;对于多维数组,如np.nonzero(np.array([[0,1],[2,0]])),返回两个索引数组,分别对应行和列。

最值位置批量查找

NumPy提供了函数来查找最大值和最小值的位置,支持批量处理。

np.argmax()和np.argmin()

这些函数返回数组中最大值或最小值的索引。

  • 语法np.argmax(array, axis=None)np.argmin(array, axis=None)
    • 如果axis=None,返回展平后数组的索引。
    • 如果指定axis,则沿着该轴操作,返回每个轴上的最值索引。
  • 示例
    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    max_index_axis0 = np.argmax(arr, axis=0)  # 沿着列找最大值索引
    print(max_index_axis0)  # 输出 [2 2 2]
    min_index = np.argmin(arr)  # 展平后最小值索引
    print(min_index)  # 输出 0
    
    解释axis=0表示按列查找,返回每个列的最大值行索引。

批量查找最值位置

对于多维数组,可以结合axis参数进行批量查找,或使用np.apply_along_axis(),但NumPy的函数已直接支持。

  • 示例:查找每行的最大值索引。
    row_max_indices = np.argmax(arr, axis=1)
    print(row_max_indices)  # 输出 [2 2 2]
    
    解释axis=1表示按行查找,返回每个行的最大值列索引。

np.unravel_index()

此函数将展平的索引转换为多维索引,适用于从np.argmax()np.argmin()的结果中获取坐标。

  • 语法np.unravel_index(flat_index, shape)
  • 示例
    flat_index = np.argmax(arr)  # 展平后最大值索引,值为8
    multi_index = np.unravel_index(flat_index, arr.shape)
    print(multi_index)  # 输出 (2, 2)
    
    解释:将索引8转换为二维坐标(2,2),对应数组中的值9。

总结

NumPy的查找与匹配函数是数据处理中的重要工具。本教程覆盖了条件查找(np.where()np.argwhere())、元素匹配(np.isin()np.in1d())、非零元素查找(np.nonzero())以及最值位置查找(np.argmax()np.argmin()np.unravel_index())。通过示例和实践,新人可以快速掌握这些功能,提升数据操作效率。建议在Jupyter Notebook或Python脚本中运行代码,加深理解。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包