我需要排序数组,同时返回一个包含原始元素排序位置的数组。 (NB不是argsort,所述索引来对数组进行排序)排序:返回一个数组,每个元素的新位置
目前这需要两个步骤:
- 一种argsort
- 一个新的阵列上的散布操作 即POS [argsort [I] ] =我
我觉得我错过了这里的一招。这是一个众所周知的算法,我忽略了一步就可以实现的算法吗?
步骤2也可以通过搜索实现,但我认为分散效率更高。
我已经包含了一些示例python代码来说明问题。
import numpy as np
l = [0,-8,1,10,13,2]
a = np.argsort(l)
# returns [1 0 2 5 3 4], the order required to sort l
# init new list to zero
pos = [0 for x in range(0,len(l))]
# scatter http://en.wikipedia.org/wiki/Gather-scatter_(vector_addressing)
for i in range(0,len(l)):
pos[a[i]] = i
print pos
# prints [1, 0, 2, 4, 5, 3], i.e. each original indexes new position in the sorted array
寻找对这个问题的引用让我感到沮丧,也许我错过了这种类型的操作正确的术语。
任何帮助或指导将不胜感激。
我之前几次做,甚至不知道那是微不足道的改造人决定把它收集*散射*。尽管如此,我看不出为什么你这么注视这个 – Alexander
原始元素的排序位置是由argsort给出的。您的代码打印排序元素的原始位置。 –
另外注意,你可以通过应用两次'argsort'函数来达到同样的效果,但显然这是不理想的 – Alexander