Python 如何对一组数据点重新排序,以最小化与另一组数据点的错误

Python 如何对一组数据点重新排序,以最小化与另一组数据点的错误,python,pandas,numpy,scikit-learn,scipy,Python,Pandas,Numpy,Scikit Learn,Scipy,我有以下15个数据点: [0.287 , 0.0691, 0.856, 0.731, 0.895, 0.76, 0.496, 0.749, 0.77, 0.684, 0.667, 0.386, 0.4, 0.334, 0.346] [0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1] 我希望更改这些数据点的顺序,以尽量减少以下15个数据点的错误: [0.287 , 0.0691, 0.856,

我有以下15个数据点:

[0.287 , 0.0691, 0.856, 0.731, 0.895, 0.76, 0.496, 0.749, 0.77, 0.684, 0.667, 0.386, 0.4, 0.334, 0.346]
[0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1]
我希望更改这些数据点的顺序,以尽量减少以下15个数据点的错误:

[0.287 , 0.0691, 0.856, 0.731, 0.895, 0.76, 0.496, 0.749, 0.77, 0.684, 0.667, 0.386, 0.4, 0.334, 0.346]
[0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1]
我可以尝试第一组数据点的所有排列,看看哪一个给出的误差最小,但这将花费永远的时间…

我假设误差是指绝对差的总和。当
a
b
具有相同的排名顺序时,不难检查此错误是否最小化。因此,可以使用
argsort

>>> a = np.array([0.287 , 0.0691, 0.856 , 0.731 , 0.895 , 0.76 , 0.496 , 0.749 , 0.77 , 0.684 , 0.667 , 0.386 , 0.4 , 0.334 , 0.346 ])
>>> b = np.array([0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1])
>>> 
>>> best_shuffle = np.empty(a.size,int)
>>> best_shuffle[b.argsort(kind="stable")] = a.argsort(kind="stable")
>>> 
>>> np.abs(b-a[best_shuffle]).sum()
1.3499000000000005