Numpy searchsorted() 函数
Numpy searchsorted() 函数用于查找应插入元素的索引,以保持排序。它适用于已排序数组,并且可以高效处理一维数组。此函数对于合并已排序数组或查找新元素的插入点等任务特别有用。
numpy.searchsorted() 函数使用二分查找算法,高效地确定应插入元素的索引,以保持排序数组的顺序。如果输入数组未排序,则可以使用 sorter 参数指定对输入数组进行排序的索引数组。
语法
以下是 Numpy searchsorted() 函数的语法 -
numpy.searchsorted(a, v, side='left', sorter=None)
参数
以下是 Numpy searchsorted() 函数的参数 -
- a:需要排序的输入数组。
- v:需要插入到数组
- sorter(可选):如果输入数组未排序,则使用此参数进行排序。
- side(可选):指定当 aa 值存在时返回哪个索引 -
- 'left'(默认):返回第一个合适的索引。
- 'right':返回最后一个合适的索引。
返回类型
此函数返回一个插入点数组,其中 v 的元素应插入到 a 中以保持顺序。
示例
以下是使用 Numpy searchsorted() 函数在已排序数组中查找插入点的基本示例 -
导入 numpy 为 np sorted_array = np.array([1, 3, 5, 7]) values = [2, 4, 6] insert_indices = np.searchsorted(sorted_array, values) print("排序数组:", sorted_array) print("要插入的值:", values) print("插入索引:", insert_indices)
输出
排序数组:[1 3 5 7] 要插入的值:[2, 4, 6] 插入索引:[1 2 3]
示例:使用 side 参数
side 参数决定索引当值存在于数组中时。
此处,我们插入一个值 5,该值已存在于 sorted_array 中。当 side 参数设置为 left 时,该函数返回第一个合适的插入索引,即 2。当 side 参数设置为 right 时,该函数返回最后一个适合插入的索引,即 4 −
import numpy as np sorted_array = np.array([1, 3, 5, 5, 7]) value = 5 left_index = np.searchsorted(sorted_array, value, side='left') right_index = np.searchsorted(sorted_array, value, side='right') print("排序数组:", sorted_array) print("要插入的值:", value) print("左索引:", left_index) print("右索引:", right_index)
输出
排序数组:[1 3 5 5 7] 要插入的值:5 左索引:2 右索引:4
示例:使用 sorter 参数
如果输入数组未排序,我们可以提供一个 sorter 参数来表示排序的索引。
在以下示例中,我们通过在 numy.searchsoreted() 函数中提供 sorter 参数,将值插入到未排序的数组中 -
import numpy as np unsorted_array = np.array([40, 10, 30, 20]) sorter = np.argsort(unsorted_array) values = [25, 15] insert_indices = np.searchsorted(unsorted_array, values, sorter=sorter) print("未排序数组:", unsorted_array) print("排序器索引:", sorter) print("要插入的值:", values) print("插入索引:", insert_indices)
输出
未排序数组:[40 10 30 20] 排序器索引:[1 3 2 0] 要插入的值:[25, 15] 插入索引:[2 1]
示例:标量作为参数
当标量作为 v 传递,结果是一个整数,而不是数组。
这里,我们使用 numpy.searchsorted() 函数将值 25 传递给 sorted_array,该函数返回一个整数,表示应插入该值的索引,以保持数组的排序顺序 -
import numpy as np sorted_array = np.array([10, 20, 30, 40]) value = 25 insert_index = np.searchsorted(sorted_array, value) print("排序数组:", sorted_array) print("要插入的值:", value) print("插入索引:", insert_index)
输出
排序数组:[10 20 30 40] 要插入的值:25 插入索引:2