首页 > 解决方案 > 查找排序数组中元素的位置

问题描述

假设我有一些要按降序排序的 numpy 数组(所有元素都是唯一的)。我需要找出初始数组的哪些位置元素将进入排序数组。

例子。

In1: [1, 2, 3] # Input

Out1: [2, 1, 0] # Expected output

In2: [1, -2, 2] # Input

Out2: [1, 2, 0] # Expected output

我试过这个:

def find_positions(A):
    A = np.array(A)
    A_sorted = np.sort(A)[::-1]
    return np.argwhere(A[:, None] == A_sorted[None, :])[:, 1]

但是当输入数组非常大(len > 100000)时它不起作用。我做错了什么,我该如何解决?

标签: pythonnumpy

解决方案


方法#1

我们可以使用双 argsort -

np.argsort(a)[::-1].argsort() # a is input array/list

方法#2

我们可以使用一个 argsort 然后数组赋值 -

# https://stackoverflow.com/a/41242285/ @Andras Deak
def argsort_unique(idx):
    n = idx.size
    sidx = np.empty(n,dtype=int)
    sidx[idx] = np.arange(n)
    return sidx

out = argsort_unique(np.argsort(a)[::-1])

推荐阅读