python - 按另一个数组的列对一个数组进行排序 - Python

标签 python arrays numpy sorting

我有两个数组,ab,如下:

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。这将为您提供从 ab 到排序状态的索引。现在,如果您对 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/

相关文章:

python - URL 中具有不同变量的多个 API

python - 是否有内置的 python 方法使用索引值而不是元素遍历列表

arrays - 如何在 Go 中声明接口(interface)数组

python - 在 python pandas 数据框中分箱(不是手动设置分箱)

python - 使用 pyUNO 搜索字符串和换行符

python - LSTM 返回具有 Sigmoid 激活的概率序列

python - 在 numpy 中缩放(或规范化)这样的数组?

arrays - 如何: REST API that passes and array of key/value pairs

python - numpy中两个一维向量的点积

python - 将 Numpy 数组转换为张量