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 で導入