for x in [4.2, 5.2]:
ind_tmp = np.searchsorted(a, x, side='left')
ind = arg_sorted[ind_tmp]
print('x={}, ind={}'.format(x, ind))
x=4.2, ind=4
x=5.2, ind=4
我相信使用sorter参数可以找到更正确的答案,如下所示
for x in [4.2, 5.2]:
ind_tmp = np.searchsorted(a, x, side='left', sorter=arg_sorted)
ind = arg_sorted[ind_tmp]
print('x={}, ind={}'.format(x, ind))
x=4.2, ind=5
x=5.2, ind=6
我没有足够的声誉来添加评论,所以我会在回答中加上我的两分钱。在
我也遇到了类似的问题,据我所知,answer可能有问题。在
为了说明我的观点,我用一个额外的元素扩展了这个数组
并像以前一样调用argsort算法
^{pr2}$此外,除了发现4.2,我还考虑了5.2。然后,建议的解决方案的输出是
我相信使用
sorter
参数可以找到更正确的答案,如下所示在这种情况下,5.2出现在4.2以上的索引1处,与原始答案相反,更符合我对正确解决方案的理解。在
您要排序的数组没有排序,它需要排序才能使
searchsorted
正常工作。np.nan
将出现在排序数组的最后一个:要解决此问题,可以使用
^{pr2}$sorter
关键字参数传入数组的已排序索引列表。您可以使用np.argsort
来查找:Edit:根据Jaime下面的注释,传递
sorter
参数将意味着函数返回排序数组中的位置(而不是未排序的数组)。由于side='left'
指定应返回第一个合适的索引,因此可以使用以下方法使用np.searchsorted
更好地标识正确的索引:相关问题 更多 >
编程相关推荐