配列の要素をソートする
今回はNumPyで作った配列の要素をソートしてみましょう。
配列の要素をソートするには、sort()関数を使います。
sort()関数の使い方
sort()関数の使い方は、以下の通りです。
オプションの引数がありますが、あまり指定することはありません。
ソートされた配列 = np.sort(配列, [axis=-1, kind=None, order=None])
引数 | 内容 |
配列 | 元の配列を指定 |
axis | 並べ替える軸。デフォルトは-1で、最後の軸に沿ってソートする。Noneを指定するとフラットな並びとなる |
kind | ソートアルゴリズム。'quicksort'(デフォルト)、'mergesort'、'heapsort'、'stable'を指定可能 |
order | ソート順序。配列に文字列のフィールドを定義して、それをキーとしてソートする |
基本的なソート
一番単純な例として、一次元配列の要素「3, 5, 1, 9, 4」を昇順に並べています。
1 2 3 |
>>> a = np.array([3,5,1,9,4]) >>> np.sort(a) array([1, 3, 4, 5, 9]) |
二次元配列のソート
二次元配列をソートしてみましょう。
二次元配列の軸は、0と1があります。
デフォルトは最後の軸なので、二次元配列では1になります。
1 2 3 4 5 6 7 8 9 |
>>> b = np.array([[3,5,1,9,4], [2,8,7,0,6], [9,1,6,3,2]]) >>> b array([[3, 5, 1, 9, 4], [2, 8, 7, 0, 6], [9, 1, 6, 3, 2]]) >>> np.sort(b) array([[1, 3, 4, 5, 9], [0, 2, 6, 7, 8], [1, 2, 3, 6, 9]]) |
ソートする軸を変えてみましょう。
以下の例は、0軸でソートしています。
1 2 3 4 |
>>> np.sort(b, axis=0) array([[2, 1, 1, 0, 2], [3, 5, 6, 3, 4], [9, 8, 7, 9, 6]]) |
軸にNoneを指定すると、二次配列がフラットな並びになります。
1 2 3 4 5 6 |
>>> b array([[3, 5, 1, 9, 4], [2, 8, 7, 0, 6], [9, 1, 6, 3, 2]]) >>> np.sort(b, axis=None) array([0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9]) |
orderを使ったソート
配列にフィールド名を付けて、orderオプションを使ってソートしてみましょう。
以下の例は、フィールド名「name」でソートしたパターンと、フィールド名「col1」でソートしたパターンです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> value = [('SUZUKI',80,90,70), ('SATO',70,90,50), ('TANAKA',30,80,40)] >>> dtype = [('name','S10'), ('col1',int), ('col2',int), ('col3',int)] >>> c = np.array(value, dtype=dtype) >>> c array([(b'SUZUKI', 80, 90, 70), (b'SATO', 70, 90, 50), (b'TANAKA', 30, 80, 40)], dtype=[('name', 'S10'), ('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4')]) >>> np.sort(c, order='name') array([(b'SATO', 70, 90, 50), (b'SUZUKI', 80, 90, 70), (b'TANAKA', 30, 80, 40)], dtype=[('name', 'S10'), ('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4')]) >>> np.sort(c, order='col1') array([(b'TANAKA', 30, 80, 40), (b'SATO', 70, 90, 50), (b'SUZUKI', 80, 90, 70)], dtype=[('name', 'S10'), ('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4')]) |
降順でソートする
降順でソートするためには、sort()の後に[::-1]を付加します。
1 2 3 4 |
>>> a array([3, 5, 1, 9, 4]) >>> np.sort(a)[::-1] array([9, 5, 4, 3, 1]) |