我有两个数组,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]])
我想对 b
进行排序,使其第一列与数组 a
的第一列匹配。
我的输出应该是
b = array([[19. , 0.63611111],
[49. , 0.59722222],
[54. , 0.74722222],
[42. , 0.72777778],
[ 7. , 0.98888889]
[46. , 0.46944444]])
最佳答案
从概念上讲,您希望获取将 b
的第零列转换为 a
的第零列的索引。想象一下对两者都进行 argsort
。这将为您提供从 a
或 b
到排序状态的索引。现在,如果您对 a
索引应用逆运算,它会告诉您如何从排序返回到 a
。碰巧的是,argsort
是它自己的倒数。因此,我向您介绍以下内容:
index = np.argsort(b[:, 0])[np.argsort(np.argsort(a[:, 0]))]
b = b[index, ...]
由于这三种排序,这是 O(n log n)
时间复杂度。这里的其他解决方案是 O(n^2)
因为它们对每个索引执行线性搜索。
关于python - 按另一个数组的列对一个数组进行排序 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010308/