今回は、NumPyの3つのSortingテクニックに焦点を当て、詳しく解説していきます。
それでは、はじめましょう
PythonのNumPyライブラリは、配列を作成したり、配列構造内の似たような型の要素を操作するための様々な関数を提供しています。
これと同時に、NumPy は配列構造内の要素をソートするための様々な関数を提供しています。
NumPyでソートするテクニック
NumPyで以下のようなソート技術を学びます。
- NumPy の sort() 関数
- NumPy の argsort() 関数
- NumPyのlexsort()関数
では、はじめましょう
1. NumPy の sort() 関数
配列構造中に存在する様々な要素をソートするために、NumPy は sort() 関数を提供します。
sort()関数で、要素をソートして、それぞれ昇順と降順に分離することができます。
以下の構文を見てください。
構文は以下の様な感じです。
numpy.sort(array, axis) |
パラメータ ‘axis’ は、ソートを実行する方法を指定します。
つまり、axis = NONE と設定すると、従来の方法でソートが行われ、結果の配列は1行の要素で構成されます。
例として以下の様になります。
この例では、配列を作成し、sort() 関数を使用して、axis = NONE (昇順) で要素をソートしています。
import numpy as np
data = np.array([[ 22 , 55 ], [ 0 , 10 ]])
res = np.sort(data, axis = None )
print ( "Data before sorting:" , data)
print ( "Data after sorting:" , res)
|
結果は以下の通りです。
Data before sorting: [[ 22 55 ]
[ 0 10 ]]
Data after sorting: [ 0 10 22 55 ]
|
例2:
この例では、配列を作成し、sort() 関数を使用して同じ配列をソートします。
ここでは、axis = 1 に設定し、行ごとにソートしています。
import numpy as np
data = np.array([[ 66 , 55 , 22 ], [ 0 , 10 , - 1 ]])
res = np.sort(data, axis = 1 )
print ( "Data before sorting:" , data)
print ( "Row wise sorting:" , res)
|
結果は以下の通りです。
Data before sorting: [[ 66 55 22 ]
[ 0 10 - 1 ]]
Row wise sorting: [[ 22 55 66 ]
[ - 1 0 10 ]]
|
この記事もチェック:Pythonによるバブルソートの昇順、降順の実装方法とコードを解説する
2. NumPy の argsort()
sort()メソッドとは別に、NumPyのソート技術として使われるargsort()関数があり、ソートされた要素のインデックスを配列として返すようになっています。
これらのソートされたインデックス値から、昇順にソートされた配列要素を取得することができます。
このように、argsort()関数を使用すると、配列の値をソートして、そのインデックス値を別の配列として取得することができます。
例えば、以下の様になります。
import numpy as np
data = np.array([ 66 , 55 , 22 , 11 , - 1 , 0 , 10 ])
res_index = np.argsort(data)
print ( "Data before sorting:" , data)
print ( "Sorted index values of the array:" , res_index)
x = np.zeros( len (res_index), dtype = int )
for i in range ( 0 , len (x)):
x[i] = data[res_index[i]]
print ( 'Sorted array from indexes:' , x)
|
結果は以下の通りです。
上記の例では、データ値に対してargsort()関数を実行し、ソートされた要素のインデックス値を取得しました。
さらに、同じ配列のインデックス値を使用して、ソートされた配列要素を取得しています。
Data before sorting: [ 66 55 22 11 - 1 0 10 ]
Sorted index values of the array: [ 4 5 6 3 2 1 0 ]
Sorted array from indexes: [ - 1 0 10 11 22 55 66 ]
|
3. NumPy lexsort()関数
lexsort()関数は、キーの並びで、すなわち列でデータ値をソートすることができます。
lexsort()関数では、2つの配列を1つずつソートします。
その結果、ソートされた要素のインデックス値が得られます。
import numpy as np
data = np.array([ 66 , 55 , 22 , 11 , - 1 , 0 , 10 ])
data1 = np.array([ 1 , 2 , 3 , 4 , 5 , 0 , - 1 ])
res_index = np.lexsort((data1, data))
print ( "Sorted index values of the array:" , res_index)
|
を出力します。
Sorted index values of the array: [ 4 5 6 3 2 1 0 ]
|
まとめ
何か疑問があれば、お気軽にコメントください。
Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。