
2.8
配列のソート
85
であることがわかるはずです。これは、
NumPy
のアルゴリズムがより柔軟であり、特にデータ数
が多くなるとパフォーマンスが向上するように設計されているためです。
In[26]: x = np.random.randn(1000000)
print("NumPy routine:")
%timeit counts, edges = np.histogram(x, bins)
print("Custom routine:")
%timeit np.add.at(counts, np.searchsorted(bins, x), 1)
NumPy routine:
10 loops, best of 3: 68.7 ms per loop
Custom routine:
10 loops, best of 3: 135 ms per
loop
この比較が示していることは、アルゴリズムの効率とは決して単純な問題ではないということで
す。大規模なデータセットに対して効率的なアルゴリズムは、常に小規模なデータセットに最適な
選択ではなく、逆も同様です(囲み「ビッグオー記法」を参照)。しかし、このアルゴリズムを自分
でコーディングする利点は、基本的なアルゴリズムを理解していれば、基本の要素を拡張して、独
自の動作を行わせることができるという点にあります。大量のデータを扱うプログラムで
Python
を効率的に使用するための鍵は、
np.histogram
のような便利な関数を適切なタイミングで使