MemoizedFunction
メモ化された関数を呼び出して結果をキャッシュ
説明
MemoizedFunction オブジェクトは、関数ハンドルのメモ化のセマンティクスと、関数呼び出しの結果のキャッシュを保持します。呼び出し構文は Function プロパティで指定された関数ハンドルと同じです。ただし、MemoizedFunction オブジェクトは関数ハンドルではありません。
メモ化された関数を特定の入力値の組み合わせではじめて呼び出すと、MATLAB® は Function プロパティで指定された関数を実行して、結果をキャッシュします。それ以降にメモ化された関数を同じ入力値の組み合わせで呼び出すと、MATLAB はこの関数を再実行せず、キャッシュされた結果を返します。
MemoizedFunction オブジェクトは入力のキャッシュと、対応する出力を保持します。このオブジェクトを呼び出すと、MATLAB は次の条件が満たされている場合に、関連付けられたキャッシュ済みの出力値を返します。
入力引数がキャッシュ済みの入力と数値的に等しくなっている。入力値を比較する場合、MATLAB は
NaNを等価として扱います。要求された出力引数の数が、入力に関連付けられたキャッシュ済みの出力の数と一致している。
注意
MemoizedFunction オブジェクトは、基となる関数の更新を認識しません。メモ化された関数に関連付けられた関数を変更する場合、オブジェクト関数 clearCache でキャッシュをクリアします。
作成
MemoizedFunction オブジェクトを作成するには、関数 memoize を呼び出します。
関数のメモ化は、MemoizedFunction オブジェクトではなく、入力関数と関連付けられます。そのため、次のことに注意してください。
新しい
MemoizedFunctionオブジェクトを同じ関数に作成すると、同じデータへの別の参照が作成されます。同じ関数をメモ化する 2 つの変数は、キャッシュおよびオブジェクト プロパティ値 (キャッシュ サイズなど) を共有します。次の例では、変数aとbはキャッシュを共有し、キャッシュ サイズが同じ値です。同様に、a = memoize(@svd); b = memoize(@svd);
bのキャッシュ (b.clearCache) をクリアすると、aのキャッシュと、関数svdをメモ化する他のすべての変数もクリアされます。clearCacheはMemoizedFunctionのオブジェクト関数です。MemoizedFunctionオブジェクトを新しい変数に割り当てると、同じデータへの別の参照が作成されます。次の例では、変数cとdはデータを共有しています。c = memoize(@svd); d = c;
変数をクリアしても、その入力関数に関連付けられたキャッシュはクリアされません。ワークスペースに存在しなくなった
MemoizedFunctionオブジェクトのキャッシュをクリアするには、同じ関数に新しいMemoizedFunctionオブジェクトを作成して、その新しいオブジェクトに関数clearCacheを使用します。あるいは、関数clearAllMemoizedCachesを使用して、すべてのMemoizedFunctionオブジェクトのキャッシュをクリアできます。
プロパティ
オブジェクト関数
clearCache | すべての MemoizedFunction オブジェクトのキャッシュのクリア |
stats | MemoizedFunction オブジェクトのキャッシュされた値と統計を返す |
例
バージョン履歴
R2017a で導入