タグ

lru_cacheとfunctionに関するishideoのブックマーク (3)

  • Python で Memoize する方法 - Qiita

    はじめに Python で Memoize (Memoization / メモ化) する方法をお伝えします。 ※「Memoize」は「Memoization」や「メモ化」ともいいます。 Memoize とは Memoize とは、キャッシュを用いて関数呼び出しを高速化する手法のことです。関数呼び出し時の引数をキーとして戻り値をキャッシュし、同じ引数で呼び出された場合にキャッシュした値を返す (関数呼び出しを省略する) ことで高速化します。 Memoize の効果が高い場合 関数が以下の特徴を持つときは、Memoize することで大きな効果を期待できます。 関数が同じ引数で何度も呼び出される 関数呼び出し 1 回あたりのコストが高い (実行時間が長い) 例としてフィボナッチ数を求める再帰関数を定義します。引数 n の値が大きくなるほど、関数 fibonacci は同じ引数で何度も呼び出されま

    Python で Memoize する方法 - Qiita
  • 1行追加するだけの超お手軽な高速化その1 メモ化 - Qiita

    Pythonを高速化する方法 Pythonで計算の高速化といえばNumPyやCythonなどが有名だと思いますが、それらを使うには色々と覚えることがあってすぐに使えるようにはなりません。特にNumPyは使いこなせれば非常に強力ですが、学習コストもかなり高いです。 実はPythonの標準ライブラリの中に超お手軽に高速化が実現できる関数が用意されています。それがメモ化を行うためのlru_cacheという関数です。 lru_cacheを使ったメモ化 メモ化の意味はおいといて、とりあえずどうやってメモ化するのかを見てみましょう。 効果をわかりやすくするために、再帰を使ったフィボナッチ関数を使います。

    1行追加するだけの超お手軽な高速化その1 メモ化 - Qiita
  • Python functoolsのlru_cache - Sabrou-mal サブロウ丸

    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回目以降は実際に関数の中身を計算することはありません。 上記の例だと、これにより関数が呼び出される回数が約 回に減少する

  • 1