2

元の要素の並べ替えられた位置を含む配列を返しながら、配列を並べ替える必要があります。(注意: argsort ではなく、配列をソートするためのインデックス)

現在、これには次の 2 つの手順が必要です。

  1. argsort
  2. 新しい配列に対する分散操作、すなわち pos[argsort[i]] = i

ここでトリックが欠けているように感じます。これは、私が見落としていた、1 つのステップで達成できるよく知られたアルゴリズムですか?

ステップ 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

この問題への参照を検索すると、このタイプの操作の正しい用語が不足している可能性があります。

ヘルプやガイダンスをいただければ幸いです。

4

1 に答える 1