Python ではlru_cache
、関数ラッパーとして持っています。これを関数に追加すると、関数は異なる入力引数ごとに 1 回だけ評価されます。
例 (Python ドキュメントから):
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
>>> [fib(n) for n in range(16)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
>>> fib.cache_info()
CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
Matlabにも同様のものが存在するのだろうか?現時点では、次のようにキャッシュ ファイルを使用しています。
function result = fib(n):
% FIB example like the Python example. Don't implement it like that!
cachefile = ['fib_', n, '.mat'];
try
load(cachefile);
catch e
if n < 2
result = n;
else
result = fib(n-1) + fib(n-2);
end
save(cachefile, 'result');
end
end
この方法で私が抱えている問題は、機能を変更した場合、キャッシュファイルを削除する必要があることです。
関数を変更してキャッシュが無効になったときにMatlabでこれを行う方法はありますか?