在NumPy数组中搜索

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程