11章配列のソート

ここまでは、主にNumPyで配列データにアクセスして操作する機能に注目してきました。この章では、NumPy配列のソートに関連するアルゴリズムについて説明します。これらのアルゴリズムは、初歩のコンピュータサイエンスコースで好まれる話題です。もしこれまでにそうしたコースを受けたことがあるならば、挿入ソート選択ソートマージソートクイックソートバブルソートその他多数のソートについては夢に出てくるほど何度も繰り返し学んだことでしょう(場合によっては悪夢だったかもしれません)。これらの目的はすべて同じです。つまりリストや配列の値を順番に並べ替えることです。

Pythonには、リストなど反復可能な(iterable)オブジェクトをソートする組み込み関数とメソッドをいくつか提供しています。sorted関数は反復可能なオブジェクトを受け取り、ソート済みのリストを返します。

In [1]: L = [3, 1, 4, 1, 5, 9, 2, 6]
        sorted(L)  # ソート済みのコピーを返す
Out[1]: [1, 1, 2, 3, 4, 5, 6, 9]

一方、sortメソッドは、リストを直接ソートします。

In [2]: L.sort()  # リストを直接ソートしNoneを返す
        print(L)
Out[2]: [1, 1, 2, 3, 4, 5, 6, 9]

Pythonのソート機能は非常に柔軟で、あらゆる反復可能なオブジェクトをソートできます。次の例は、文字列をソートしています。

In [3]: sorted('python')
Out[3]: ['h', 'n', 'o', 'p', 't', 'y']

このような組み込みのソートは便利ですが、以前説明したようにPythonは動的型付き言語であり、型の均一な配列用に設計された関数ほどの性能が出せません。そこで、NumPyソート関数の出番です。 ...

Get Pythonデータサイエンスハンドブック 第2版 ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.