Python 两个排序的部分重叠numpy数组之间的索引映射

Python 两个排序的部分重叠numpy数组之间的索引映射,python,arrays,numpy,indices,Python,Arrays,Numpy,Indices,我想解决类似于中详述的问题,但这两个数组不一定包含相同的值集,尽管它们的值在每个数组中是唯一的,并且是排序的 例如,如果我有两个阵列: a = np.array([1.1, 2.2, 3.3, 4.4, 5.5]) b = np.array([2.2, 3.0, 4.4, 6.0]) 我想得到一个与a长度相同的数组,它给出了b中匹配元素所在位置的索引,如果不匹配,则为-1。即在这种情况下: map = np.array([-1, 0, -1, 2, -1]) 使用np.searchsorte

我想解决类似于中详述的问题,但这两个数组不一定包含相同的值集,尽管它们的值在每个数组中是唯一的,并且是排序的

例如,如果我有两个阵列:

a = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
b = np.array([2.2, 3.0, 4.4, 6.0])
我想得到一个与
a
长度相同的数组,它给出了
b
中匹配元素所在位置的索引,如果不匹配,则为-1。即在这种情况下:

map = np.array([-1, 0, -1, 2, -1])

使用
np.searchsorted

使用searchsorted索引检查匹配项,然后使用无效说明符屏蔽无效的索引。对于匹配检查,使用
idx
作为这些索引执行
b[idx]==a
。因此-

invalid_specifier = -1
idx = np.searchsorted(b,a)
idx[idx==len(b)] = 0
out = np.where(b[idx]==a, idx, invalid_specifier)

使用searchsorted索引检查匹配项,然后使用无效说明符屏蔽无效的索引。对于匹配检查,使用
idx
作为这些索引执行
b[idx]==a
。因此-

invalid_specifier = -1
idx = np.searchsorted(b,a)
idx[idx==len(b)] = 0
out = np.where(b[idx]==a, idx, invalid_specifier)

我想检查一下为什么会这样。我说的对吗,您正在将溢出索引值设置为0(
idx[idx==len(b)]=0
),因为如果对数组进行排序,您可以保证
b[0]当代码位于最右边的数组时,保证<或代码>永远不会等于<代码> a <代码>的值吗?@ USER 2667066,我知道那些溢出的不是匹配。因此,在代码< > IDX < />代码中分配给我们的东西并不重要,因为在<代码>中没有对应的匹配> < <代码> >该设置只是为了确保下一步索引不会因为越界而引发异常。我想检查一下为什么会这样。我说的对吗,您正在将溢出索引值设置为0(
idx[idx==len(b)]=0
),因为如果对数组进行排序,您可以保证
b[0]当代码位于最右边的数组时,保证<或代码>永远不会等于<代码> a <代码>的值吗?@ USER 2667066,我知道那些溢出的不是匹配。因此,在代码< > IDX < />代码中分配给我们的东西并不重要,因为在<代码>中没有对应的匹配> < <代码> >该设置只是为了确保下一步索引不会因为越界而引发异常。