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
有序数组插入
二分查找
排序数据处理
常见于:
时间序列数据
排序数据结构
分段查找