以下のように座標が格納されたリストがあり、そこからaとbお互いの最も近い座標同士を一対一で対応させたいのですが

import numpy as np

a = np.array([[38,139], [60,150], [188, 71], [41, 138]])
b = np.array([[23,188], [70, 172], [52, 196]])

for i in a:
    min = np.linalg.norm(i - b[0])
    for j in b:
        c = np.linalg.norm(i - j)
        if min > c:
            min = c
            #index_a = np.where(a[:] == i)
            #index_b = np.where(b[:] == j)
            result = np.array([min, i, j])
        else:
            pass
    print(result)
【出力結果】
[45.967379738244816 array([ 38, 139]) array([ 70, 172])]
[24.166091947189145 array([ 60, 150]) array([ 70, 172])]
[155.32224567009067 array([188,  71]) array([ 70, 172])]
[44.68780594300866 array([ 41, 138]) array([ 70, 172])]

というように全てのaの座標が同じbの座標を最近点としてしまいます。この場合、採用するのは

[24.166091947189145 array([ 60, 150]) array([ 70, 172])]

の座標のペアで、次はこの座標を除いてそれぞれを比較し、どちらかのリストの要素がなくなるまでそれを繰り返したいのですがどうしたら良いでしょうか?

コメントからの転記

2画像間の物体の移動距離を調べることなのですが、独立した2枚の画像だと例えば、1枚目で移動前の人間を3人検出して、2枚目で移動後の3人の人間を検出したとき、2枚目の3人の人間は1枚目の画像のどこの場所にいた人間だったのかが分からないので、それぞれの物体の移動前の中心座標(x,y)をaに、移動後のそれぞれの物体中心座標(x,y)をbに入れて、「移動前の座標から一番近い移動後の座標を同じ物体の移動前と移動後の座標とする」という仮定のもと、aとbのそれぞれの座標の距離を調べて一番近いものを探すということをしていたので、aとbには移動前と移動後という順序があります。