Python NumPy / ndarray のメソッド #8

株式会社リュディアです。今回も NumPy についてまとめていきます。

前回までの NumPy / ndarray のメソッドについてのまとめへのリンクは以下を参考にしてください。

以下のリンクの内容を元にまとめを作っていきます。

今回から Item selection and manipulation に分類されるメソッドをまとめていきます。今回は sort(), argsort() です。

まず sort() から始めます。名前の通り要素の並び替えです。さっそくサンプルコードから始めてみましょう。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)
print(y)

y.sort(0)
print(y)

y.sort(1)
print(y)

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# [[ 4  2  3  1]
#  [ 7  6  5  8]
#  [ 9 10 11 12]]
#
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
#

いつもの 3行4列の2次元配列を使います。sort の引数を 0 にしたときは列単位で 並び替えされていることがわかります。同様に引数を 1 にしたときは行単位で並び替えされていることがわかりますね。

次に argsort() です。こちらは動きが理解しづらい部分もあるのでコードと図を使って説明していきます。またメソッドもあるのですが戻り値を使いたいので NumPy の関数 argsort() を使います。動作は同じです。では早速コードを見ていきましょう。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)
print(y)

print(np.argsort(y, 0))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# [[1 1 1 1]
#  [2 2 2 2]
#  [0 0 0 0]]
#

まず第2引数が 0 なので sort と同じく列方向への処理であることは理解いただけると思います。では argsort() が何をしているか説明します。1 列目の [9 4 7] を具体例として説明します。もし [9 4 7] を sort して [4 7 9] とした場合に要素の値の並びではなく要素のインデクスの並びがどうなるかを返します。以下の図を見ていただくとわかっていただけると思います。

画像1

同様に第2引数を 1 にした結果も見てみましょう。以下のコードを見てください。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)
print(y)

print(np.argsort(y, 1))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# [[0 1 2 3]
#  [3 1 2 0]
#  [2 1 0 3]]
#

今度は行単位ですが以下の図と照らし合わせながら見てください。

画像2

argsort() は sort() をした場合の要素のインデクスがどうなっているかを返すわけですが、その情報を返されても何がうれしいのかわからないと思います。それについてはまた後日まとめてみます。

NumPy / ndarray のメソッドに関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


いいなと思ったら応援しよう!