Python NumPy 搜索 数组(array)

在数据处理过程中,经常需要 在数组中查找满足条件的元素或确定某个值应该插入的位置。NumPy 提供了多种搜索方法,其中最常用的是:where() —— 根据条件查找元素位置,searchsorted() —— 在有序数组中查找插入位置。本文主要介绍这两种常见的数组搜索方法。

1、搜索数组元素(where)

在 NumPy 中,可以使用 np.where() 方法查找数组中满足条件的元素,并返回这些元素的 索引位置

语法

np.where(condition)

其中:

  • condition 为条件表达式

  • 返回值是一个包含索引的元组

示例 1:查找值为 4 的元素索引

import numpy as np

arr=np.array([1, 2, 3, 4, 5, 4, 4])

x=np.where(arr==4)

print(x)

输出:

(array([3, 5, 6]),)

说明:

数字 4 出现在索引:

  • 3
  • 5
  • 6

示例 2:查找偶数的索引

import numpy as np

arr=np.array([1, 2, 3, 4, 5, 6, 7, 8])

x=np.where(arr%2==0)

print(x)

输出:

(array([1, 3, 5, 7]),)

说明:

  • 返回的是 偶数元素的位置

示例 3:查找奇数的索引

import numpy as np

arr=np.array([1, 2, 3, 4, 5, 6, 7, 8])

x=np.where(arr%2==1)

print(x)

输出:

(array([0, 2, 4, 6]),)

示例 4:二维数组搜索

对于二维数组,where() 会返回 行索引和列索引。

import numpy as np

arr=np.array([[1, 2, 3],
                [4, 5, 6]])

x=np.where(arr>3)

print(x)

输出:

(array([1, 1, 1]), array([0, 1, 2]))

说明:

  • 第一数组:行索引

  • 第二数组:列索引

2、搜索排序位置(searchsorted)

searchsorted() 用于 在已排序数组中查找插入位置

它使用 二分查找算法(Binary Search),因此效率很高。

该方法返回:

如果插入指定值,应插入的位置索引

以保持数组的排序顺序。

语法

np.searchsorted(arr, value, side='left')

参数说明:

  • arr:必须是已排序数组

  • value:要插入的值

  • side

    • 'left'(默认)

    • 'right'

  • 示例 1:查找值 7 的插入位置

    import numpy as np
    
    arr=np.array([6, 7, 8, 9])
    
    x=np.searchsorted(arr, 7)
    
    print(x)

    输出:

    1

    说明:

    • 如果插入 7

    • 应该插入到索引 1

    示例 2:从右侧搜索

    默认返回 最左侧插入位置

    如果希望返回 最右侧插入位置,可以使用:

    side='right'

    示例:

    import numpy as np

    arr=np.array([6, 7, 8, 9])

    x=np.searchsorted(arr, 7, side='right')

    print(x)

    输出:

    2

    说明:

    • 插入在索引 2

    • 即所有 7 的右侧

    示例 3:搜索多个值

    searchsorted() 也支持 一次搜索多个值

    import numpy as np

    arr=np.array([1, 3, 5, 7])

    x=np.searchsorted(arr, [2, 4, 6])

    print(x)

    输出:

    [1 2 3]

    说明:

    如果插入:

    数值插入位置
    2索引 1
    4索引 2
    6索引 3

    3、where 与 searchsorted 的区别

    方法用途是否要求数组排序
    where根据条件查找元素位置
    searchsorted查找元素应插入的位置

    4、常见使用场景

    使用 where

    • 查找满足条件的数据

    • 过滤数据

    • 获取索引位置

    例如:

    arr[arr>5]

    使用 searchsorted

    • 有序数组插入

    • 二分查找

    • 排序数据处理

    常见于:

    • 时间序列数据

    • 排序数据结构

    • 分段查找

    推荐阅读
    cjavapy编程之路首页