有两个数组 u 和 v。
u.shape = (N,d) v.shape = (q,d)
我需要为每个 q 找到 u 中每个 d 的最接近值的索引。
例如:
u = [[5,3],
[3,4],
[3,2],
[8,7]] , shape (4,2)
v = [[1,3],
[2,4]] , shape (2,2)
我发现很多人说我们可以做到:
v = v.expand_dims(v,axis=1) # reshape to (2,1,2) for broadcast
result = np.argmin(abs(v-u),axis=1) # (u-v).shape = (2,4,2)
当然它找到了最接近的值的索引。但!当有两个最接近的值时,我需要采用“第二个”的索引。
在这种情况下:
v-u = [[[-4, 0],
[-2, -1],
[-2, 1],
[-7, -4]],
[[-3, 1],
[-1, 0],
[-1, 2],
[-6, -3]]])
沿着axis=1,(uv)[0,:,0]有两个-2,(uv)[1,:,0]有两个-1如果我们直接用:
result = np.argmin(abs(v-u),axis=1)
结果将是:
array([[1, 0],
[1, 1]], dtype=int64)
它返回对应于第一次出现的索引,但我需要第二个,即
array([[2, 0],
[2, 1]], dtype=int64)
任何人都可以帮忙吗?谢谢!