用語比較
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.sort | np.argsort |
|---|---|---|
| 返すもの | 並べ替えた値の配列(コピー) | 並べ替える順番を表す添字の配列(整数) |
| x = np.array([3, 1, 2]) の結果 | array([1, 2, 3]) | array([1, 2, 0]) |
| 使いどころ | 値を小さい順に並べて見たい | ほかの配列を同じ順に並べ替えたい、何番目が最小かを知りたい |
| 引数 | axis(既定 -1)・kind(既定 quicksort)・order | axis(既定 -1)・kind(既定 quicksort)・order |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
値を小さい順に並べて確認したい人
sort を使います。並べ替えた値がそのまま返ります。
点数の順位に合わせて、名前の配列も並べ替えたい人
argsort を使います。点数の添字を作り、名前の配列にも同じ添字を当てれば、同じ順になります。
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
欲しいのが値か順番かを決める
並べ替えた値なら sort、順番の添字なら argsort です。
- 2
次元を確かめる
2次元以上なら axis を決めます。既定値は -1(最後の軸)です。
- 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 を使う場面を言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.zerosとnp.emptyの違い|0で埋めるか、初期化しないか(Python3データ分析)
NumPyのnp.zeros(0で埋めた配列)とnp.empty(初期化しない配列)の違いを、中身の値、速度、使いどころで整理します。NumPy公式リファレンスの例のnp.zeros(s)(s=(2, 2))が2行2列の0になる一方、np.empty([2, 2])の中身は不定になる点つきです。
- DataFrame.pivotとpivot_tableの違い|集計しない組み替えか、集計つきの表か(Python3データ分析)
pandasのpivot(集計せずに表の形を組み替える)とpivot_table(集計して表にする)の違いを、重複する組み合わせの扱い、aggfunc、使いどころで整理します。pandas公式リファレンスの例で、同じindexとcolumnsの組が重複するとpivotが
ValueErrorになる点つきです。 - np.ravelとflattenの違い|必要なときだけコピーするか、常にコピーを返すか(Python3データ分析)
NumPyのnp.ravel(コピーは必要なときだけ)とndarray.flatten(常にコピーを返す)の違いを、戻り値、order引数、元の配列への影響で整理します。NumPy公式リファレンスの例のnp.ravel(x, order='F')が[1, 4, 2, 5, 3, 6]になる計算つきです。
よくある質問
Qnp.sortとnp.argsortの違いは?
sort は並べ替えた配列のコピーを返し、argsort は並べ替えたときの順番を表す添字の配列を返します。
Qargsortの結果はどう使いますか?
1次元なら a[index_array] で並べ替えた a になります。2次元以上では take_along_axis を使います。
Qnanはどこに並びますか?
公式は、NumPy 1.4.0 以降、nan は末尾に並べ替えられると書いています。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
