You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
はじめに Python で Memoize (Memoization / メモ化) する方法をお伝えします。 ※「Memoize」は「Memoization」や「メモ化」ともいいます。 Memoize とは Memoize とは、キャッシュを用いて関数呼び出しを高速化する手法のことです。関数呼び出し時の引数をキーとして戻り値をキャッシュし、同じ引数で呼び出された場合にキャッシュした値を返す (関数呼び出しを省略する) ことで高速化します。 Memoize の効果が高い場合 関数が以下の特徴を持つときは、Memoize することで大きな効果を期待できます。 関数が同じ引数で何度も呼び出される 関数呼び出し 1 回あたりのコストが高い (実行時間が長い) 例としてフィボナッチ数を求める再帰関数を定義します。引数 n の値が大きくなるほど、関数 fibonacci は同じ引数で何度も呼び出されま
色々Pythonを速くするための世の中に方法はありますが、本記事ではCythonやPyPyなどの高速化のTIPSに触れていきます。 この記事で触れること プロファイラーなどの計測関係 ビルドインモジュールなどの機能 Pythonのキャッシュ関係 Cython Numba PyPy(紹介だけ) その他一部のサードパーティーのライブラリ関係 この記事で触れないけどそのうち書くかもしれない内容 並列処理(multiprocessing)、並行処理(threading)、非同期処理(asyncio)、それらの組み合わせ(concurrent.futures)など Dask関係 PyPyの踏み込んだ検証内容など 話題のVaex 記事で使う環境 Windows10(ローカルのJupyter)とUbuntu(クラウド上のカーネル)で進めていきます。 言語はPython3.7.1(win)とPython3
lru_cache lru_cacheは関数の引数と返り値を保存する。 from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) 公式の例。再帰的にフィボナッチ数を計算していますが、そのまま実行すると呆れるほど遅いです。 実際、この関数にnを渡すと約 回ほどこの関数が呼び出されることなりますが、関数の引数としてそのほとんどが、過去渡されたことのある引数が繰り返し渡されることになります。 @lru_cacheを関数の前につければ、引数nに対する返り値を保存します。つまり同じ引数が2回以上渡されるときは、2回目以降は実際に関数の中身を計算することはありません。 上記の例だと、これにより関数が呼び出される回数が約 回に減少する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く