AI資格ドリル
資格を選ぶ

用語比較

np.sortとnp.argsortの違い|並べ替えた値か、並べ替える順番の添字か(Python3データ分析)

np.sort は並べ替えた配列のコピーを返し、np.argsort はその順番を表す添字の配列を返します。

値そのものが欲しいなら sort、別の配列を同じ順に並べ替えたいなら argsort が向きます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

np.sortとnp.argsortの要点

np.sort

並べ替えた配列のコピーを返す。axis の既定値は -1(最後の軸)。axis=None なら平らにしてから並べ替える。

np.argsort

並べ替えたときの順番を表す添字の配列を返す。a と同じ形で、axis の既定値は -1。1次元なら a[index_array] で並べ替えた a になる。

違いを表で確認

比較軸np.sortnp.argsort
返すもの並べ替えた値の配列(コピー)並べ替える順番を表す添字の配列(整数)
x = np.array([3, 1, 2]) の結果array([1, 2, 3])array([1, 2, 0])
使いどころ値を小さい順に並べて見たいほかの配列を同じ順に並べ替えたい、何番目が最小かを知りたい
引数axis(既定 -1)・kind(既定 quicksort)・orderaxis(既定 -1)・kind(既定 quicksort)・order

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

値を小さい順に並べて確認したい人

sort を使います。並べ替えた値がそのまま返ります。

02

点数の順位に合わせて、名前の配列も並べ替えたい人

argsort を使います。点数の添字を作り、名前の配列にも同じ添字を当てれば、同じ順になります。

03

argsort の結果が「1, 2, 0」で、値が並んでいない人

argsort が返すのは値ではなく添字です。元の配列に当てると、並べ替えた値になります。

具体例で使い分ける

例 1

argsort は順番の添字を返す

公式の例の x = np.array([3, 1, 2]) に np.argsort(x) を使います。

  • 結果は array([1, 2, 0]) です。
  • x[1] が 1、x[2] が 2、x[0] が 3 なので、この順に取り出すと小さい順になります。
  • 公式は、a が1次元なら a[index_array] が並べ替えた a になると書いています。

結論: argsort の結果は、元の配列から取り出す順番です。値ではありません。

例 2

sort は axis で並べ替える向きが変わる

公式の例の a = np.array([[1, 4], [3, 1]]) を並べ替えます。

  • np.sort(a) は最後の軸に沿って並べ、array([[1, 4], [1, 3]]) になります。
  • np.sort(a, axis=0) は最初の軸に沿って並べ、array([[1, 1], [3, 4]]) になります。
  • np.sort(a, axis=None) は平らにしてから並べ、array([1, 1, 3, 4]) になります。

結論: 2次元以上では、axis で並べ替える向きを決めます。既定値は -1 です。

例 3

2次元の argsort は take_along_axis で値に戻す

公式の例の x = np.array([[0, 3], [2, 2]]) に axis=0 で argsort を使います。

  • ind = np.argsort(x, axis=0) は array([[0, 1], [1, 0]]) です。
  • np.take_along_axis(x, ind, axis=0) は array([[0, 2], [2, 3]]) で、np.sort(x, axis=0) と同じです。

結論: 2次元以上では、a[index_array] ではなく take_along_axis を使うと、並べ替えた値が得られます。

問題文から答えを選ぶ手順

  1. 1

    欲しいのが値か順番かを決める

    並べ替えた値なら sort、順番の添字なら argsort です。

  2. 2

    次元を確かめる

    2次元以上なら axis を決めます。既定値は -1(最後の軸)です。

  3. 3

    別の配列も同じ順にするかを確かめる

    するなら argsort で添字を作り、両方の配列に当てます。

試験での見分け方

  • 1並べ替えた値が欲しいときは sort を使う。
  • 2順番の添字が欲しい、または別の配列も同じ順に並べたいときは argsort を使う。
  • 32次元以上の argsort の結果を値に戻すときは、take_along_axis を使う。
  • 4どちらも axis の既定値は -1、kind の既定値は quicksort である。

誤答しやすい選択肢

argsort が並べ替えた値を返すと考える

修正: argsort が返すのは添字です。x = np.array([3, 1, 2]) なら array([1, 2, 0]) で、値は並んでいません。

2次元で axis を考えずに並べ替える

修正: axis の既定値は -1 なので、行ごとに並べ替わります。列ごとに並べるなら axis=0 を指定します。

sort が元の配列を並べ替えると考える

修正: np.sort は並べ替えたコピーを返します。公式は、その場で並べ替えるものとして ndarray.sort を別に挙げています。

確認問題

Q1x = np.array([3, 1, 2]) のとき、np.argsort(x) の結果は?

答え: array([1, 2, 0])

x[1]、x[2]、x[0] の順に取り出すと、1、2、3 と小さい順になります。

Q2a = np.array([[1, 4], [3, 1]]) のとき、np.sort(a, axis=None) の結果は?

答え: array([1, 1, 3, 4])

axis=None は、配列を平らにしてから並べ替えます。

Q3sort と argsort の axis の既定値は?

答え: -1(最後の軸)

公式は、どちらも axis の既定値を -1 としています。

Q42次元の argsort の結果を、並べ替えた値に戻す関数は?

答え: np.take_along_axis

公式は、take_along_axis(a, index_array, axis=axis) が、次元によらず並べ替えた a になると書いています。

到達チェック

  • sort が値、argsort が添字を返すと言える
  • argsort の結果を元の配列に当てる意味を説明できる
  • axis の既定値と axis=None の動きを答えられる
  • 2次元で take_along_axis を使う場面を言える

同じ資格で次に知りたいこと

よくある質問

Qnp.sortとnp.argsortの違いは?

A

sort は並べ替えた配列のコピーを返し、argsort は並べ替えたときの順番を表す添字の配列を返します。

Qargsortの結果はどう使いますか?

A

1次元なら a[index_array] で並べ替えた a になります。2次元以上では take_along_axis を使います。

Qnanはどこに並びますか?

A

公式は、NumPy 1.4.0 以降、nan は末尾に並べ替えられると書いています。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)