python - 查找排序数组中元素的位置
问题描述
假设我有一些要按降序排序的 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)时它不起作用。我做错了什么,我该如何解决?
解决方案
方法#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])
推荐阅读
- java - Most appropriate "2D" representation for storing a string and double value side-by-side in Java?
- asp.net - 在 .Net 中的 HttpApplication 事件之间传递数据
- ios - 我可以将 LED 用作增强现实目标吗?
- r - 带有长表达式的 R 正则表达式
- google-chrome - 有没有办法将伪元素“之前”/“之后”直接添加到 Chrome 的开发工具样式选项卡?
- node.js - Nestjs招摇问题
- sql - Hibernate 无法从终端执行可以正常执行的查询
- java - 为 kafka connect s3 sink 连接器定义自定义格式
- mysql - MYSQL SELECT 时间戳为 1 到 2 周的所有行
- mallet - Mallet:“VM 初始化期间发生错误。无法为 3145728KB 对象堆预留足够的空间?