假设我有一些 numpy 数组(所有元素都是唯一的),我想按降序排序。我需要找出初始数组的元素将在排序数组中占据哪些位置。
例子。
In1: [1, 2, 3] # Input
Out1: [2, 1, 0] # Expected output
In2: [1, -2, 2] # Input
Out2: [1, 2, 0] # Expected output
Run Code Online (Sandbox Code Playgroud)
我尝试过这个:
def find_positions(A):
A = np.array(A)
A_sorted = np.sort(A)[::-1]
return np.argwhere(A[:, None] == A_sorted[None, :])[:, 1]
Run Code Online (Sandbox Code Playgroud)
但当输入数组非常大(len > 100000)时它不起作用。我做错了什么以及如何解决?
方法#1
我们可以使用双参数排序 -
np.argsort(a)[::-1].argsort() # a is input array/list
Run Code Online (Sandbox Code Playgroud)
方法#2
我们可以使用一个 argsort,然后使用数组赋值 -
# /sf/answers/2886959981/ @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])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1929 次 |
最近记录: |