8

为了明确我的问题,如果我有一个数组 a 作为 Out[123]: [1, 3, 4, 6, 9, 10, 54] 当我尝试搜索列表中的数字时,searchsort 返回正确的值但是当我尝试了不在列表中的东西,它返回一个荒谬的值

这是一些结果

In [131]: a
Out[131]: [1, 3, 4, 6, 9, 10, 54]

In [132]: searchsorted(a,1)
Out[132]: 0

In [133]: searchsorted(a,6)
Out[133]: 3

In [134]: searchsorted(a,[9,54,1])
Out[134]: array([4, 6, 0])

In [135]: searchsorted(a,[9,54,1,0])
Out[135]: array([4, 6, 0, 0])
***> # here 0 is not in the list, but turns up @ position 0***

In [136]: searchsorted(a,740)
Out[136]: 7
***> # here 0 is not in the list, but turns up @ position 7***

为什么会这样?

4

4 回答 4

12

searchsorted告诉你元素属于哪里保证排序:

找到排序数组 a 中的索引,这样,如果 v 中的相应元素插入到索引之前,则 a 的顺序将被保留。

在位置 7插入740将保留顺序,在位置 0 插入 0 也是如此。

于 2013-03-15T06:20:54.487 回答
3

searchsorted它不会告诉你事情在哪里它会告诉你事情应该去哪里以保持列表的排序。

所以0必须插入到位置 0,在1. 同样,740需要插入到位置 7,超出列表的当前末尾。

您可以通过阅读此处的文档来了解这一点:

numpy.searchsorted(a, v, side='left', sorter=None)

查找应插入元素以保持顺序的索引。

找到排序数组 a 中的索引,这样,如果 v 中的相应元素插入到索引之前,则 a 的顺序将被保留。

于 2013-03-15T06:21:24.317 回答
1

文档中它指出它使用二进制搜索来发现排序列表中项目的插入点。

“插入点”一词的意思是,如果将项目 I 插入到已排序数组 A 中的插入点索引 N,则数组 A 将保持与新项目 I 一起排序。

你的例子[9, 54, 1]没有意义,因为数组没有排序。

你可以bisect在 python 中使用模块来做同样的事情,没有 numpy.

于 2013-03-15T06:20:41.330 回答
0

searchsorted(initial_list,insert_list,side) 默认值:side = 'left'

For example: searchsorted(x,v)
x = [1,2,3,4,5]
v = [-10,10,2,3]

这是我的例子的结果

:)

于 2021-10-13T16:33:58.893 回答