MemoizedFunction

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

Описание

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

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

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

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

  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