Sil*_*nna 3 python arrays sorting numpy
我有两个数组,a和b,如下:
a = array([[19. , 0.84722222],
[49. , 0.86111111],
[54. , 0.86666667],
[42. , 0.9 ],
[ 7. , 0.91111111],
[46. , 0.99722222]])
b = array([[46. , 0.46944444],
[49. , 0.59722222],
[19. , 0.63611111],
[42. , 0.72777778],
[54. , 0.74722222],
[ 7. , 0.98888889]])
Run Code Online (Sandbox Code Playgroud)
我想排序b,使其第一列与 array 的第一列匹配a。我的输出应该是
b = array([[19. , 0.63611111],
[49. , 0.59722222],
[54. , 0.74722222],
[42. , 0.72777778],
[ 7. , 0.98888889]
[46. , 0.46944444]])
Run Code Online (Sandbox Code Playgroud)
从概念上讲,您希望获得将 0b列变成 0列的索引a。想象一下argsort两者都做。这将为您提供从a或b到排序状态的索引。现在,如果您对a索引应用逆操作,它将告诉您如何从 sorted 返回到a. 碰巧,argsort是它自己的逆。因此,我向您介绍以下内容:
index = np.argsort(b[:, 0])[np.argsort(np.argsort(a[:, 0]))]
b = b[index, ...]
Run Code Online (Sandbox Code Playgroud)
O(n log n)由于三种类型,这是时间复杂度。这里的其他解决方案是O(n^2)因为它们对每个索引执行线性搜索。