在NumPy数组中搜索
Numpy提供了各种方法来搜索不同种类的数值,在这篇文章中,我们将介绍两个重要的方法。
1. numpy.where:() 它返回输入数组中满足给定条件的元素的索引。
语法: numpy.where(condition[, x, y])
参数:
- condition : 当真时,产生x,否则产生y。
- x, y :x、y和条件需要可以广播到一些形状。
返回值:
out :[ndarray or tuple of ndarrays] 如果同时指定了x和y,输出数组包含条件为True的x的元素,以及其他地方的y的元素。
如果只给出了条件,则返回 condition.nonzero()这个元组,即条件为 True 的索引。
下面的例子演示了如何使用where()进行搜索。
# importing the module
import numpy as np
# creating the array
arr = np.array([10, 32, 30, 50, 20, 82, 91, 45])
# printing arr
print("arr = {}".format(arr))
# looking for value 30 in arr and storing its index in i
i = np.where(arr == 30)
print("i = {}".format(i))
输出:
arr = [10 32 30 50 20 82 91 45]
i = (array([2], dtype=int64),)
正如你所看到的,变量i是一个可迭代的,其第一个元素是我们搜索到的值的索引。我们可以通过将最后一条打印语句替换为
print("i = {}".format(i[0]))
这将改变最终输出为
arr = [10 32 30 50 20 82 91 45]
i = [2]
2. numpy.searchsorted():该函数用于查找排序后的数组arr的索引,这样,如果在索引之前插入元素,arr的顺序仍然会被保留。这里,使用二进制搜索来寻找所需的插入索引。
语法 : numpy.searchsorted(arr, num, side=’left’, sorter=None)
参数 :
arr : [array_like] 输入数组。如果sorter是None,那么它必须以升序排序,否则sorter必须是一个可以排序的索引数组。
num : [array_like]我们要插入数组的值。
side : [‘left’, ‘right’], optional.如果是’left’, 将给出找到的第一个合适位置的索引。如果是’右’,则返回最后一个这样的索引。如果没有合适的索引,返回0或N(其中N是a的长度)。
* num : [array_like, Optional] 对数组a进行升序排序的整数索引阵列。它们通常是argsort的结果。
返回 : [indices], 与num形状相同的插入点阵列。
下面的例子解释了searchsorted()的使用。
# importing the module
import numpy as np
# creating the array
arr = [1, 2, 2, 3, 3, 3, 4, 5, 6, 6]
print("arr = {}".format(arr))
# left-most 3
print("left-most index = {}".format(np.searchsorted(arr, 3, side="left")))
# right-most 3
print("right-most index = {}".format(np.searchsorted(arr, 3, side="right")))
输出:
arr = [1, 2, 2, 3, 3, 3, 4, 5, 6, 6]
left-most index = 3
right-most index = 6