我需要排序數組,同時返回一個包含原始元素排序位置的數組。 (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