【问题标题】:argsort get order of each element [duplicate]argsort 获取每个元素的顺序[重复]
【发布时间】:2025-12-14 06:10:01
【问题描述】:

我有一个数组,我想获取每个元素的顺序。

a=[1.83976,1.57624,1.00528,1.55184]
np.argsort(a)

以上代码返回

array([2, 3, 1, 0], dtype=int64)

但我想得到每个元素的顺序的数组。 例如

[0, 1, 3, 2]

means a[0] is largest number (0th)
a[1] is 1th
a[2] is 3rd
a[3] is 2nd

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我会解释一下,np.argsort(np.argsort(a)) 给出的元素在那里的顺序就像1.83976 是数组中的最大值,所以它被分配了最大值3。我只是从len(a)-1 中减去该值以获得您的输出。

    >>> import numpy as np
    >>> a=[1.83976,1.57624,1.00528,1.55184]
    >>> np.argsort(a)
    array([2, 3, 1, 0])
    >>> np.argsort(np.argsort(a))
    array([3, 2, 0, 1])
    >>> [len(a)-i for i in np.argsort(np.argsort(a))]
    [1, 2, 4, 3]
    >>> [len(a)-1-i for i in np.argsort(np.argsort(a))]
    [0, 1, 3, 2]
    >>> np.array([len(a)-1]*len(a))-np.argsort(np.argsort(a))
    array([0, 1, 3, 2])
    

    【讨论】:

      【解决方案2】:

      默认情况下,argsort 按升序返回已排序元素的索引。当您需要降序时, argsort(-a) 将为您提供正确的排序索引。要获得元素的排名,您需要再次应用 argsort。

      a = np.array([1.83976,1.57624,1.00528,1.55184])
      indx_sorted = np.argsort(-a)
      np.argsort(indx_sorted)
      >>> array([0, 1, 3, 2])
      

      【讨论】:

      • 嗨!虽然这可能会提供答案,但 * 通常不鼓励只留下代码答案。请解释为什么这是一个解决方案,因为它将帮助 OP 和未来的访问者。谢谢!
      最近更新 更多