NumPy - 搜索数组
在 NumPy 中搜索数组
在 NumPy 中搜索数组是指在数组中查找符合特定条件的元素或检索其索引的过程。
NumPy 提供了各种函数来执行搜索,即使在大型多维数组中也是如此,这些函数如下:
- where() 函数
- nonzero() 函数
- searchsorted() 函数
- argmax() 函数
- argmin() 函数
- extract() 函数
使用 where() 函数
NumPy where() 函数用于查找数组中元素的索引满足给定条件。该函数还可用于根据条件替换元素。语法如下:-
np.where(condition, [x, y])
其中,
- condition - 需要检查的条件。
- x(可选)- 条件为真时使用的值。
- y(可选)- 条件为假时使用的值。
示例
在下面的示例中,我们使用 where() 函数检索数组中大于"25"的元素的索引,并将数组中小于或等于"25"的元素替换为"0"。-
import numpy as np array = np.array([10, 20, 30, 40, 50]) indices = np.where(array > 25) print("数组元素大于 25 的索引:", indices) # 根据条件替换元素 modified_array = np.where(array > 25, array, 0) print("将元素 <= 25 替换为 0 后的数组:", modified_array)
以下是得到的输出 −
数组元素大于 25 的索引:(array([2, 3, 4]),) 将元素 <= 25 替换为 0 后的数组:[ 0 0 30 40 50]
使用 nonzero() 函数
NumPy nonzero() 函数用于查找数组中所有非零元素的索引。 它返回一个数组元组,其中每个数组包含特定维度上非零元素的索引。
当您想要滤除零元素或识别稀疏数组中重要元素的位置时,此函数非常有用。语法如下:-
numpy.nonzero(a)
其中,a 是要查找非零元素索引的输入数组。
示例
在下面的示例中,我们使用 nonzero() 函数检索一维数组中非零元素的索引:-
import numpy as np array = np.array([0, 1, 2, 0, 3, 0, 4]) nonzero_indices = np.nonzero(array) print("非零元素的索引:", nonzero_indices)
这将产生以下结果 -
非零元素的索引:(array([1, 2, 4, 6]),)
使用 searchsorted() 函数
NumPy searchsorted() 函数用于查找应插入元素的索引,以保持排序数组中的顺序。
此函数在需要在动态插入元素的同时保持排序顺序的算法中非常有用。以下是语法 -
np.searchsorted(sorted_array, values, side='left')
其中,
- sorted_array − 需要搜索的已排序数组。
- values − 需要插入的值。
- side − 如果为"left",则给出第一个合适位置的索引。如果结果为"正确",则返回最后一个合适位置的索引。
示例
在此示例中,我们检索排序数组中应插入值"2"、"4"和"6"的索引,以保持顺序 -
import numpy as np sorted_array = np.array([1, 3, 5, 7, 9]) values = np.array([2, 4, 6]) indices = np.searchsorted(sorted_array, values) print("应插入值的索引:", indices)
以下是上述代码的输出 -
应插入值的索引: [1 2 3]
使用 argmax() 函数
NumPy 中的 argmax() 函数用于查找数组中指定轴上最大值的索引。如果未指定轴,则返回展开后数组中最大值的索引。语法如下:
numpy.argmax(a, axis=None, out=None)
其中:
- a − 表示输入数组。
- axis(可选)− 表示要查找最大值的轴。如果未指定,则在执行操作之前先展开数组。
- out(可选)− 表示存储结果的位置。如果提供,其形状必须与预期输出相同。
示例:在二维数组中使用 argmax() 函数
在以下示例中,我们使用 argmax() 函数查找二维数组中指定轴上最大值的索引 -
import numpy as np array = np.array([[10, 15, 5], [7, 12, 20]]) index_of_max_along_axis = np.argmax(array, axis=1) print("沿轴 1 的最大值的索引:", index_of_max_along_axis)
获得的输出如下所示 -
轴 1 上的最大值:[1 2]
示例:在展平数组中使用 argmax() 函数
这里,我们使用 argmax() 函数查找展平数组中最大值的索引 -
import numpy as np array = np.array([[10, 15, 5], [7, 12, 20]]) index_of_max_flattened = np.argmax(array) print("展平数组中最大值的索引:", index_of_max_flattened)
执行上述代码后,我们得到以下输出 -
展平数组中最大值的索引: 5
使用 argmin() 函数
NumPy 中的 argmin() 函数用于查找数组中指定轴上的最小值的索引。如果未指定轴,则返回展开后数组中最小值的索引。语法如下:-
numpy.argmin(a, axis=None, out=None)
其中:
- a − 表示输入数组。
- axis(可选)− 表示查找最小值的轴。如果未指定,则在执行操作之前先展开数组。
- out(可选)− 表示存储结果的位置。如果提供,其形状必须与预期输出相同。
示例
在下面的示例中,我们使用 argmin() 函数查找二维数组中沿指定轴的最小值的索引 -
import numpy as np array = np.array([[10, 15, 5], [7, 12, 2]]) index_of_min_along_axis = np.argmin(array, axis=1) print("沿轴 1 的最小值的索引:", index_of_min_along_axis)
结果如下 −
沿轴 1 的最小值的索引:[2 2]
使用 extract() 函数
NumPy 中的 extract() 函数用于根据布尔条件从数组中提取元素。它返回一个一维数组,该数组仅包含与布尔条件中的 True 值对应的输入数组元素。
与返回索引的 np.where() 函数不同,np.extract() 函数直接返回满足条件的元素。
语法如下:-
numpy.extract(condition, arr)
Where,
- condition - 它是一个布尔数组或条件,用于指定要提取的元素。它必须与 arr 的形状相同。
- arr − 它是要从中提取元素的输入数组。
示例
在下面的示例中,我们使用 np.extract() 函数过滤并返回数组中大于"25"的元素 −
import numpy as np array = np.array([10, 20, 30, 40, 50]) condition = array > 25 extracted_elements = np.extract(condition, array) print("大于 25 的元素:", extracted_elements)
我们得到如下所示的输出 -
大于 25 的元素:[30 40 50]
使用布尔索引进行搜索
NumPy 中的布尔索引用于根据特定条件搜索和过滤数组。它涉及创建一个布尔数组(或掩码),其中每个值根据条件是否满足而为 True 或 False。
然后使用此布尔数组对原始数组进行索引,仅提取条件为 True 的元素。
示例
以下是在 NumPy 中使用布尔索引根据条件过滤元素的简单示例 -
import numpy as np array = np.array([10, 20, 30, 40, 50]) boolean_mask = array > 25 filtered_array = array[boolean_mask] print("过滤后的数组 (元素 > 25):", filtered_array)
我们得到如下所示的输出 -
过滤后的数组 (元素 > 25): [30 40 50]