在python工作如何searchsort?(how does searchsort in pyth

2019-07-21 16:47发布

为了清楚我的问题说,如果我有一个数组作为输出的[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***

为什么会出现这种情况?

Answer 1:

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

找到的索引到一个排序后的数组一个,使得如果v中的相应元件被索引之前插入,的顺序将被保留。

插入740在位置7将保持排序,如将在位置0插入0。



Answer 2:

searchsorted不会告诉你那里的东西,它会告诉你这里的东西应该去保持排序的名单。

所以0将不得不在位置0被插入时,之前1 。 类似地, 740到第7位被插入的需要,超出了列表的当前端。

您可以通过阅读文档看到这里 :

numpy.searchsorted(A,V,侧= '左',分拣器=无)

找到其中的元素应该插入维持秩序索引。

找到的索引到一个排序后的数组一个,使得如果v中的相应元件被索引之前插入,的顺序将被保留。



Answer 3:

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

单词“插入点”是指,如果项目I被插入到在排序后的数组A中的插入点索引N,阵列A将保持与新的项目I.排序

你的例子一样[9, 54, 1]因为该阵列未排序是无意义的。

您可以使用bisect模块在Python做同样的事情,没有numpy的。



文章来源: how does searchsort in python work?