【问题标题】:Python: how to make indices of second array match indices of first array when first array gets sorted?Python:当第一个数组被排序时,如何使第二个数组的索引与第一个数组的索引匹配?
【发布时间】:2020-03-08 23:13:43
【问题描述】:

我有两个 Numpy 数组:a: [2,5,3,7,9,1]b: [1,2,3,4,5,6]。我想对 a 进行排序,并让 b 的元素以与 a 的索引相同的方式移动。在这种情况下,a 将变为 [1,2,3,5,7,9]b 将变为 [6,1,3,2,4,5]。我知道如何使用np.sorta 进行排序,但是我将如何重新排列b

【问题讨论】:

    标签: python arrays numpy sorting


    【解决方案1】:

    使用 NumPy 的 argsort:

    >>> b[a.argsort()]
    array([6, 1, 3, 2, 4, 5])
    

    没有 NumPy 的替代方案:

    >>> a, b = zip(*sorted(zip(a, b)))
    >>> a
    (1, 2, 3, 5, 7, 9)
    >>> b
    (6, 1, 3, 2, 4, 5)
    
    

    【讨论】:

    • 顺便说一句,我认为纯 Python 解决方案可能会导致 a 不稳定。
    • @hilberts_drinking_problem 嗯,对。对于a 本身,它可能无关紧要(如果它只是数字),但它会影响b 的顺序。我可以做到a, _, b = zip(*sorted(zip(a, range(len(a)), b))) 左右,但这不那么漂亮......
    • 可能是a, b = zip(*sorted(zip(a, b), key=itemgetter(0)))?只是将比较放在第二个元素上。
    • @hilberts_drinking_problem 看起来不错。或者一个技巧:sorted(b, key=partial(next, iter(a))) :-)
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多