numpy.searchsorted对于包含努比·楠

2024-04-25 01:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想:

index = numpy.searchsorted(array([  1.,   2.,   3.,  nan,   4.,   5.]), 4.2, side='left')

给我:

^{pr2}$

这最多可以使用值3.9,但不能在数组中的nan之后。在

有什么想法吗?在


Tags: numpyindex数组nanarrayleftsidepr2
2条回答

我没有足够的声誉来添加评论,所以我会在回答中加上我的两分钱。在

我也遇到了类似的问题,据我所知,answer可能有问题。在

为了说明我的观点,我用一个额外的元素扩展了这个数组

a = np.array([1., 2., 3., np.nan, 4., 5., 6.])

并像以前一样调用argsort算法

^{pr2}$

此外,除了发现4.2,我还考虑了5.2。然后,建议的解决方案的输出是

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

在这种情况下,5.2出现在4.2以上的索引1处,与原始答案相反,更符合我对正确解决方案的理解。在

您要排序的数组没有排序,它需要排序才能使searchsorted正常工作。np.nan将出现在排序数组的最后一个:

>>> np.sort([1., 2., 3., nan, 4., 5.])
array([  1.,   2.,   3.,   4.,   5.,  nan])

要解决此问题,可以使用sorter关键字参数传入数组的已排序索引列表。您可以使用np.argsort来查找:

^{pr2}$

Edit:根据Jaime下面的注释,传递sorter参数将意味着函数返回排序数组中的位置(而不是未排序的数组)。由于side='left'指定应返回第一个合适的索引,因此可以使用以下方法使用np.searchsorted更好地标识正确的索引:

>>> idx = np.searchsorted([1., 2., 3., nan, 4., 5.], 4.2, side='left')
>>> arg_sorted[idx]
4

相关问题 更多 >