让我的问题清楚 如果我有一个阵列a as 出[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***
为什么会这样?
答案 0 :(得分:7)
searchsorted
告诉你元素属于哪个保证排序:
将索引查找到已排序的数组,这样,如果在索引之前插入v中的相应元素,则会保留a的顺序。
在位置7插入740
将保留排序,就像在位置0插入0一样。
答案 1 :(得分:3)
searchsorted
并未告诉您所在的位置,它会告诉您应该去哪里以保持列表的排序。
因此0
必须在1
之前的位置0插入。同样,740
需要插入位置7,超出列表的当前末尾。
您可以通过阅读文档here:
来看到这一点numpy.searchsorted(a,v,side ='left',sorter = None)
查找应插入元素以维持顺序的索引。
将索引查找到已排序的数组中,如果v中的相应元素在索引之前插入,则将保留a的顺序。
答案 2 :(得分:1)
表示它使用binary search来查看已排序列表中项目的插入点。
单词'插入点'表示,如果将项目I插入到排序数组A中的插入点索引N,则数组A将保持按新项目I排序。
像[9, 54, 1]
这样的例子没有意义,因为数组没有排序。
你可以在python中使用bisect
模块做同样的事情,而不是numpy。