【NumPy】ndarrayの要素をソートするsort関数[Python]

  • URLをコピーしました!
目次

NumPy

前回、Pythonで1次元リストを指定した個数ずつに分割した2次元リストに変換する方法を紹介しました。

今回はNumPyでndarrayの要素をソートするsort関数を紹介します。

それでは始めていきましょう。

通常のリストのソート

まずはNumPyではなく、通常のリストのソートをおさらいします。

通常のリストをソートするには非破壊的な処理である「sorted」と破壊的な処理である「sort」が存在しました。

破壊的とはもとのリストを書き換えてしまう方法で、非破壊的とはリストを書き換えないで新たなリストを返す方法です。

試してみるとこんな感じです。

a = [3, 5, 2, 4, 1]

print(sorted(a))
print(a)

実行結果
[1, 2, 3, 4, 5]
[3, 5, 2, 4, 1]
a = [3, 5, 2, 4, 1]

a.sort()

print(a)

実行結果
[1, 2, 3, 4, 5]

「sorted」は非破壊な処理なので、再度「a」を呼び出した場合、元のリストが返ってきます。

反面、「sort」は破壊的な処理なので「a」を表示するとソートされたリストが表示されます。

NumPyのsort

NumPyのソートも2種類あり、「np.sort(ndarray)」と「ndarray.sort()」で、それぞれ非破壊的な処理、破壊的な処理です。

import numpy as np

a = np.array([3, 5, 2, 4, 1])

print(np.sort(a))

実行結果
[1 2 3 4 5]
import numpy as np

a = np.array([3, 5, 2, 4, 1])

a.sort()

print(a)

実行結果
[1 2 3 4 5]

「np.sort(ndarray)」は通常のリストに対しても使用できます。

つまり「np.sort(リスト)」に対しても使用できますが、この場合は返り値はリストではなくndarrayになります。

import numpy as np

a = [3, 5, 2, 4, 1]

print(np.sort(a))
print(type(np.sort(a)))

実行結果
[1 2 3 4 5]
<class 'numpy.ndarray'>

「np.sort()」の場合はオプション引数に「axis」を追加することでどの軸に対してソートするか指定することもできます。

import numpy as np

b = np.array([[3, 5, 2, 4, 1],
              [24, 22, 23, 21, 25],
              [7, 9, 6, 8, 10],
              [19, 20, 17, 18, 16],
              [15, 13, 11, 12, 14]])

print(np.sort(b))
print(np.sort(b, axis=0))
print(np.sort(b, axis=1))

実行結果
[[ 1  2  3  4  5]
 [21 22 23 24 25]
 [ 6  7  8  9 10]
 [16 17 18 19 20]
 [11 12 13 14 15]]
[[ 3  5  2  4  1]
 [ 7  9  6  8 10]
 [15 13 11 12 14]
 [19 20 17 18 16]
 [24 22 23 21 25]]
[[ 1  2  3  4  5]
 [21 22 23 24 25]
 [ 6  7  8  9 10]
 [16 17 18 19 20]
 [11 12 13 14 15]]

この様に2次元のndarrayの場合、「axis=0」だと縦の方向にソートし、「axis=1」だと横の方向にソートします。

指定していない場合は「axis=1」と同様に横方向にソートします。

ちなみに両方向にソートしたい場合はそれぞれの軸に対してソートします。

import numpy as np

b = np.array([[3, 5, 2, 4, 1],
              [24, 22, 23, 21, 25],
              [7, 9, 6, 8, 10],
              [19, 20, 17, 18, 16],
              [15, 13, 11, 12, 14]])

print(np.sort(np.sort(b, axis=0), axis=1))

実行結果
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]
 [21 22 23 24 25]]

次回はRDkitライブラリを使って分子を描画する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次