HOWTO · NumPy

NumPy の列で配列を並べ替える

Python で NumPy 配列を列で並べ替えるために使用できる主なメソッドは、numpy.sort()関数と numpy.argsort()関数の 2つです。

このページの内容

このチュートリアルでは、NumPy の列で配列を並べ替える方法を紹介します。

numpy.sort() 関数を使用した NumPy の列による配列の並べ替え

2D NumPy 配列があり、特定の列内の要素の順序に従って行を並べ替えたいとします。これは、numpy.sort() 関数を使用して実行できます。numpy.sort() 関数は NumPy 配列をソートします。numpy.sort() 関数の order および axis パラメーターで列インデックスと軸を指定できます。numpy.sort() 関数を使用するには、配列をフィールド付きの構造化配列に変換する必要があります。これを行うには、numpy.view() 関数を使用できます。次のコード例を参照してください。

import numpy as np

array = np.array([[1, 1, 2], [0, 0, 1], [1, 1, 3]])
print("Array before sorting\n", array)

array.view("i8,i8,i8").sort(order=["f1"], axis=0)
print("Array after sorting\n", array)

出力:

Array before sorting
 [[1 1 2]
 [0 0 1]
 [1 1 3]]
Array after sorting
 [[0 0 1]
 [1 1 2]
 [1 1 3]]

最初に、np.array() 関数を使用して 2DNumPy 配列 array を作成しました。次に、array.view() 関数を使用して、配列を構造化配列に変換しました。その後、sort(order=['f1'], axis=0) 関数を使用して、配列を 2 番目の列で並べ替えました。ここで、f1 は 2 番目の列を指します。

numpy.argsort() 関数を使用した NumPy の列による配列の並べ替え

前のアプローチとまったく同じことを行うもう 1つの簡単な方法は、numpy.argsort() 関数を使用することです。numpy.argsort() 関数は、配列の要素を並べ替えるためにも使用されます。これは前のアプローチと非常に似ていますが、このアプローチを機能させるために numpy.view() 関数を使用する必要はありません。numpy.argsort() 関数は、配列の並べ替えに使用されるインデックスを返します。次のコード例を参照してください。

import numpy as np

array = np.array([[1, 1, 2], [0, 0, 1], [1, 1, 3]])
print("Array before sorting\n", array)

array[array[:, 1].argsort()]
print("Array after sorting\n", array)

出力:

Array before sorting
 [[1 1 2]
 [0 0 1]
 [1 1 3]]
Array after sorting
 [[0 0 1]
 [1 1 2]
 [1 1 3]]

最初に、np.array() 関数を使用して 2DNumPy 配列 array を作成しました。次に、配列スライスを使用して array の 2 番目の列のみを指定し、np.argsort() 関数で並べ替えました。np.argsort() 関数によって返されるインデックスを使用して、array を並べ替えました。