sohatach's blog

http://github.com/soha

numpyのargsortの動き

Pythonによるデータ分析入門――NumPy、pandasを使ったデータ処理
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
を読んでいて、よくわからなかった箇所があったのでメモ。
numpyのargsort()の動きについてです。


http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html

>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])

ドキュメントによれば、argsort()は、ソート結果の配列のインデックスを返すとのことのようですが、
これの意味が当初よくわからなかったので実際に動かして確認してみました。

もとの配列は、[3, 1, 2]となっており、それぞれのインデックスは、
左から0(対応する値は3), 1(対応する値は1), 2(対応する値は2)となります。
対応がわかりやすいように値の後ろに括弧でインデックス値を入れると3(0),1(1),2(2)となります。
argsort()により、並び替えた結果の配列のインデックスを返すとなるので、
並び替えた結果の「値の配列」は、[1(1), 2(2), 3(0)]となるべきはずで、
元の配列でのインデックス値で表現すると結果は、
1(対応する値は1), 2(対応する値は2), 0(対応する値は3)
となります。


実際に値を増やして動かしたところ想定通りの結果となっているため上記認識の理解で良さそうです。

>>> import numpy as np
>>> x = np.array([3, 2, 1, 4])
>>> np.argsort(x)
array([2, 1, 0, 3])
>>>

元の配列は、
3(0), 2(1), 1(2), 4(3)
値を並び替えると
1(2), 2(1), 3(0), 4(3)
となり、インデックス値で表現すると
[2, 1, 0, 3]となります。