MemoizedFunction

Вызовите мемоизованную функцию и результаты кэша

Описание

Объект MemoizedFunction поддерживает memoization семантику указателя на функцию и кэш результатов вызова функции. Это имеет тот же синтаксис вызова как указатель на функцию, заданный в свойстве Function. Однако объект MemoizedFunction не является указателем на функцию.

В первый раз, когда вы вызываете мемоизованную функцию с определенным набором входных значений, MATLAB® выполняет функцию, заданную свойством Function, и кэширует результаты. В более поздних вызовах мемоизованной функции с тем же набором входных параметров MATLAB возвращает кэшируемые результаты вместо того, чтобы выполнить функцию снова.

Объект MemoizedFunction поддерживает кэш входных параметров и соответствующих выходных параметров. Когда это вызывается, MATLAB возвращает связанные кэшируемые выходные значения, если следующие условия верны.

  1. Входные параметры численно равны кэшируемым входным параметрам. При сравнении входных значений MATLAB обрабатывает NaN s как равный.

  2. Количество требуемых выходных аргументов совпадает с количеством кэшируемых выходных параметров, сопоставленных с входными параметрами.

Внимание

Объект MemoizedFunction не знает об обновлениях базовой функции. Если вы изменяете функцию, сопоставленную с мемоизованной функцией, очистите кэш с функцией объекта clearCache.

Создание

Чтобы создать объект MemoizedFunction, вызовите функцию memoize.

memoization функции сопоставлен с функцией ввода а не с объектом MemoizedFunction. Поэтому помните о следующем.

  • Построение нового объекта MemoizedFunction к той же функции создает другую ссылку на те же данные. Две переменные, что memoize та же функция совместно используют кэш и значения свойства объекта, такие как размер кэша. В следующем примере переменные a и b совместно используют кэш и имеют то же значение для размера кэша.

    a = memoize(@svd);
    b = memoize(@svd);
    Точно так же очистка кэша для b (b.clearCache) также очищает кэш для a и любые другие переменные, что memoize svd функционируют. clearCache является функцией объекта MemoizedFunction.

  • Присвоение объекта MemoizedFunction к новой переменной создает другую ссылку на те же данные. В следующем примере осуществляют обмен данными переменные c и d.

    c = memoize(@svd);
    d = c;

  • Очищение переменной не очищает кэш, сопоставленный с функцией ввода. Чтобы очистить кэш для объекта MemoizedFunction, который больше не существует в рабочей области, создайте новый объект MemoizedFunction к той же функции и используйте функцию clearCache на новом объекте. Также можно очистить кэши для всех объектов MemoizedFunction с помощью функции clearAllMemoizedCaches.

Свойства

развернуть все

Свойства MemoizedFunction управляют поведением мемоизованной функции. Можно получить доступ или изменить свойства мемоизованной функции. Используйте запись через точку для ссылки на конкретный объект и свойство:

m = memoize(@ones);
m.CacheSize = 25;

Функция с memoization примененной семантикой, возвратилась как указатель на функцию. Это свойство доступно только для чтения.

Типы данных: function_handle

Максимальное количество кэшируемых комбинаций ввода и вывода, заданных как положительное целое число.

Типы данных: double

Кэширование состояния, заданного как true или false. Чтобы дать MATLAB команду вызывать функцию, заданную свойством Function независимо от того, кэшируются ли результаты, а не к результатам кэша, устанавливает это свойство на false.

Типы данных: логический

Функции объекта

clearCacheОчистите кэш для объекта MemoizedFunction
statsВозвратите кэшируемые значения и статистику для объекта MemoizedFunction

Примеры

свернуть все

Создайте объект MemoizedFunction memozing функция datetime.

mf = memoize(@datetime)
mf = 
  MemoizedFunction with properties:

     Function: @datetime
      Enabled: 1
    CacheSize: 10

Измените максимальное количество кэшируемых комбинаций ввода и вывода.

mf.CacheSize = 2
mf = 
  MemoizedFunction with properties:

     Function: @datetime
      Enabled: 1
    CacheSize: 2

Вызовите мемоизованную функцию с тремя различными входными значениями.

a = mf('today');
b = mf('yesterday');
c = mf('tomorrow');

Вызовите функцию stats, чтобы исследовать кэшируемые результаты.

s = stats(mf);
s.Cache.Inputs{:}
ans = 1x1 cell array
    {'yesterday'}

ans = 1x1 cell array
    {'tomorrow'}

Результаты вызывания мемоизованной функции с 'today' не кэшируются, потому что CacheSize равняется 2.

В вашей текущей рабочей папке создайте следующий файл memoizeSquareExample.m, который содержит функцию, чтобы вычислить квадрат номера. Когда функция вызвана, если MATLAB возвращает кэшируемые результаты, msg не отображен.

type memoizeSquareExample.m
function m = memoizeSquareExample(n)

m = n^2;
msg = "The square of " + string(n) + " is " + string(m) +".";
disp(msg)

end

Memoize функция. По умолчанию memoization включен.

mf = memoize(@memoizeSquareExample);

Вызовите мемоизованную функцию дважды с тем же входным значением. msg отображен только однажды, потому что второй вызов функции возвращает кэшируемые результаты.

a = mf(42);
The square of 42 is 1764.
b = mf(42);

Отключите memoization и вызовите мемоизованную функцию с повторным входным значением. Несмотря на то, что результаты для входа 42 кэшируются, msg отображен, потому что memoization отключен.

mf.Enabled = false;
c = mf(42);
The square of 42 is 1764.

Вызовите мемоизованную функцию с различным набором входных параметров.

d = mf(13);
The square of 13 is 169.

Вызовите функцию stats, чтобы исследовать кэшируемые результаты. MATLAB не возвращает кэшируемые результаты, в то время как memoization отключен, или соберите статистические данные, это продолжает хранить значения ввода и вывода.

s = mf.stats();
s.Cache.Inputs{:}
ans = 1x1 cell array
    {[42]}

Смотрите также

|

Введенный в R2017a