February 2024
Intermediate to advanced
576 pages
9h 17m
Japanese
これまで説明したように、PyDataスタックが強力であるのは、NumPyやpandasなどの直感的な上位レベルの構文を、コンパイルされた下位レベルのコードで実行する能力を基盤にしているからです。NumPyのベクトル化やブロードキャスト操作およびpandasのグループ化などがそのよい例です。こうした抽象化は多くの一般的ユースケースで効率的かつ効果的ですが、しばしば一時的な中間オブジェクトを生成し、計算時間とメモリ使用に過大なオーバーヘッドをもたらす可能性があります。
この問題に対応するため、コストのかかる中間配列の割り当てを行わず、C言語コードの実行速度で直接操作を行う機能として、NumExprライブラリ(https://github.com/pydata/numexpr)のeval関数とquery関数をpandasは提供します。この章では、この使い方を説明し、どのような場合にこれらを使用するべきか、いくつかの経験則を示します。
すでに見てきたように、NumPyとpandasは高速なベクトル化演算をサポートしています。例えば、2つの配列の要素ごと加算は次のように実行します。
In [1]: import numpy as np
rng = np.random.default_rng(42)
x = rng.random(1000000)
y = rng.random(1000000)
%timeit x + y
Out[1]: 2.21 ms ± 142 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)