如何“压缩排序”并行的numpy数组?

发布于 2021-01-29 19:21:47

如果我有两个并行列表,并想按第一个中的元素顺序对其进行排序,则非常简单:

>>> a = [2, 3, 1]
>>> b = [4, 6, 7]
>>> a, b = zip(*sorted(zip(a,b)))
>>> print a
(1, 2, 3)
>>> print b
(7, 4, 6)

我如何使用numpy数组执行相同操作而又不将其拆包到常规Python列表中?

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    b[a.argsort()] 应该可以。

    运作方式如下。首先,您需要找到排序为a的排列。argsort是一种计算方法:

    >>> a = numpy.array([2, 3, 1])
    >>> p = a.argsort()
    >>> p
    [2, 0, 1]
    

    您可以轻松地检查这是否正确:

    >>> a[p]
    array([1, 2, 3])
    

    现在对b应用相同的排列。

    >>> b = numpy.array([4, 6, 7])
    >>> b[p]
    array([7, 4, 6])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看