我有一个精确排序的numpy数组,像这样:
arr = np.asarray([1351.1, 1351.11, 1351.14, 1351.16])
,我有一个值数组,也是像这样精确排序的值
vs = np.asarray([1351.10, 1351.13, 1351.17])
我想找到arr
中值的最后一个索引小于或等于vs
,例如:
vs[0]=1351.10
=>arr[0] == v[0]
=比;输出0
vs[1]=1351.13
=>arr[1] < v[1]
&arr[2] > v[1]
=>输出1
vs[2]=1351.17
=>arr[3] < v[2]
=比;输出3
所以最后输出[0, 1, 3]
当然我可以for looparr
,然后比较arr
和vs
,但如果arr
的大小非常大,它可能不是一个好的选择。
我发现np.searchsorted
,它不是我想要的,例如:np.searchsorted(arr, 1351.13)
返回2
,但我想要1
。还有一个问题,它不能利用vs
也排序。
使用np.searchsorted
和side = 'right'
,然后减去1:
np.searchsorted(arr, vs, side = 'right') - 1
array([0, 1, 3], dtype=int64)