matlab.tall.movingWindow

Применить функцию окна для блоков данных

Синтаксис

tA = matlab.tall.movingWindow(fcn,window,tX)
[tA,tB,...] = matlab.tall.movingWindow(fcn,window,tX,tY,...)
[___] = matlab.tall.movingWindow(___,Name,Value)

Описание

пример

tA = matlab.tall.movingWindow(fcn,window,tX) применяет функциональный fcn однажды на окно, когда окно отодвигается первая размерность tX. Вывод tA является вертикальной конкатенацией результатов применения fcn к каждому окну.

пример

[tA,tB,...] = matlab.tall.movingWindow(fcn,window,tX,tY,...), то, где fcn является указателем на функцию, который возвращает несколько выходных параметров, возвращает массивы tA,tB,..., каждый соответствующий одному из выходных аргументов fcn. Входные параметры к fcn являются окнами данных из аргументов tX, tY, .... Этот синтаксис имеет эти требования:

  • fcn должен возвратить то же количество выходных параметров, как требовались от matlab.tall.movingWindow.

  • Каждый вывод fcn должен быть тем же типом как вход tX First Data.

  • Все выходные параметры tA,tB,... должны иметь ту же высоту.

[___] = matlab.tall.movingWindow(___,Name,Value) задает дополнительные опции с одним или несколькими аргументами пары "имя-значение" с помощью любого из предыдущих синтаксисов. Например, чтобы настроить размер шага между окнами, можно задать 'Stride' и скаляр. Или изменить обработку конечных точек, где существует недостаточно элементов, чтобы завершить окно, можно задать 'EndPoints' и допустимую опцию ('shrink', 'discard' или числовое дополнительное значение).

Примеры

свернуть все

Используйте matlab.tall.movingWindow, чтобы вычислить движущуюся медиану задержек прибытия и отъезда авиакомпании.

Создайте datastore для набора данных airlinesmall.csv и преобразуйте его в длинный массив. Данные содержат информацию о прибытии и время отправления рейсов США. Извлеките переменные ArrDelay и DepDelay, которые являются векторами задержек рейсов, чтобы создать длинный массив, содержащий задержки как отдельные столбцы.

varnames = {'ArrDelay', 'DepDelay'};
ds = datastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ...
    'SelectedVariableNames', varnames);
tt = tall(ds);
tX = [tt.ArrDelay tt.DepDelay]
tX =

  Mx2 tall double matrix

     8    12
     8     1
    21    20
    13    12
     4    -1
    59    63
     3    -2
    11    -1
    :     :
    :     :

Используйте matlab.tall.movingWindow, чтобы вычислить движущуюся медиану данных в первой размерности. Используйте размер окна 5 000.

fcn = @(x) median(x,1,'omitnan');
tA = matlab.tall.movingWindow(fcn,5000,tX)
tA =

  MxNx... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Соберите уникальные строки результата в память.

tA = gather(unique(tA,'rows'))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 1.4 sec
- Pass 2 of 2: Completed in 50 sec
Evaluation completed in 52 sec
tA = 31×2

   -4.0000   -2.0000
   -3.5000   -2.0000
   -3.0000   -2.0000
   -3.0000   -1.5000
   -3.0000   -1.0000
   -3.0000   -0.5000
   -3.0000         0
   -2.5000   -1.0000
   -2.5000         0
   -2.0000   -1.0000
      ⋮

Используйте matlab.tall.movingWindow, чтобы применить функцию с несколькими выходными параметрами к окнам данных.

Создайте длинный массив из случайной матрицы в оперативной памяти.

X = rand(1000,5);
tX = tall(X)
tX =

  1,000x5 tall double matrix

    0.8147    0.6312    0.7449    0.3796    0.4271
    0.9058    0.3551    0.8923    0.3191    0.9554
    0.1270    0.9970    0.2426    0.9861    0.7242
    0.9134    0.2242    0.1296    0.7182    0.5809
    0.6324    0.6525    0.2251    0.4132    0.5403
    0.0975    0.6050    0.3500    0.0986    0.7054
    0.2785    0.3872    0.2871    0.7346    0.0050
    0.5469    0.1422    0.9275    0.6373    0.7825
      :         :         :         :         :
      :         :         :         :         :

Создайте функцию, которая находит сумму, среднее значение, медиану и режим каждого окна данных в первой размерности. Каждый вывод должен иметь тот же размер в первой размерности, но другие размерности могут иметь различные размеры. Для каждого окна данных вычисление суммы производит скаляр, в то время как другие вычисления производят 1-by-N векторы.

Сохраните функцию в своей локальной рабочей области.

function [S,mn,mdn,md] = mystats(X)
  S = sum(X,[2 1]);
  mn = mean(X,1);
  mdn = median(X,1);
  md = mode(X,1);
end

Примечание: Эта функция включена в конце примера как локальная функция.

Используйте matlab.tall.movingWindow, чтобы применить функцию mystats к данным с размером окна 250. Задайте четыре выходных аргумента, чтобы возвратить все выходные параметры от mystats. Используйте пару "имя-значение" 'EndPoints', чтобы отбросить неполные окна.

[tS,tmn,tmdn,tmd] = matlab.tall.movingWindow(@mystats, 250, tX, 'EndPoints', 'discard')
tS =

  751x1 tall double column vector

  631.7095
  630.8637
  630.1174
  629.4130
  629.4731
  630.1447
  630.6657
  631.5536
     :
     :


tmn =

  751x5 tall double matrix

    0.4910    0.5113    0.5289    0.4968    0.4987
    0.4916    0.5100    0.5265    0.4973    0.4980
    0.4902    0.5107    0.5253    0.4976    0.4967
    0.4918    0.5107    0.5246    0.4939    0.4967
    0.4890    0.5126    0.5274    0.4925    0.4964
    0.4885    0.5134    0.5294    0.4917    0.4976
    0.4906    0.5127    0.5317    0.4922    0.4956
    0.4922    0.5130    0.5325    0.4925    0.4960
      :         :         :         :         :
      :         :         :         :         :


tmdn =

  751x5 tall double matrix

    0.4793    0.5321    0.5472    0.4890    0.4953
    0.4793    0.5289    0.5417    0.4920    0.4953
    0.4793    0.5321    0.5417    0.4920    0.4953
    0.4861    0.5321    0.5417    0.4890    0.4953
    0.4793    0.5349    0.5472    0.4854    0.4953
    0.4793    0.5349    0.5553    0.4854    0.4953
    0.4861    0.5321    0.5633    0.4854    0.4912
    0.4877    0.5321    0.5633    0.4854    0.4912
      :         :         :         :         :
      :         :         :         :         :


tmd =

  751x5 tall double matrix

    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
    0.0046    0.0098    0.0058    0.0018    0.0002
      :         :         :         :         :
      :         :         :         :         :
function [S,mn,mdn,md] = mystats(X)
  S = sum(X,[2 1]);
  mn = mean(X,1);
  mdn = median(X,1);
  md = mode(X,1);
end

Входные параметры

свернуть все

Функция окна, чтобы применяться, заданный как указатель на функцию или анонимная функция. Каждый вывод fcn должен быть тем же типом как первый вход tX. Можно использовать опцию 'OutputsLike', чтобы возвратить выходные параметры различных типов данных.

Общая функциональная подпись fcn

[a, b, c, ...] = fcn(x, y, z, ...)
fcn должен удовлетворить эти требования:

  1. Входные параметры — входные параметры [x, y, z, ...] являются блоками данных, которые умещаются в памяти. Блоки производятся путем извлечения данных из соответствующих входных параметров длинного массива [tX, tY, tZ, ...]. Входные параметры [x, y, z, ...] удовлетворяют эти свойства:

    • Все входные параметры [x, y, z, ...] имеют тот же размер в первой размерности после любого позволенного расширения.

    • Блоки данных в [x, y, z, ...] прибывают из того же индекса в высокой размерности, принимая, что длинный массив является неодиночным элементом в высокой размерности. Например, если tX и tY являются неодиночным элементом в высокой размерности, то первым набором блоков может быть x = tX(1:20000,:) и y = tY(1:20000,:).

    • Когда первая размерность любого [tX, tY, tZ, ...] имеет размер 1, соответствующий блок [x, y, z, ...] состоит из всех данных в том длинном массиве.

    • Применение fcn должно привести к сокращению входных данных к скаляру или срезу массива высоты 1.

      Когда вход является матрицей, массивом N-D, таблицей, или расписание, применяя fcn должно привести к сокращению входных данных в каждом из его столбцов или переменных.

  2. Выходные аргументы Выходные параметры [a, b, c, ...] являются блоками, которые умещаются в памяти, чтобы быть отправленными в соответствующие выходные параметры [tA, tB, tC, ...]. Выходные параметры [a, b, c, ...] удовлетворяют эти свойства:

    • Все выходные параметры [a, b, c, ...] должны иметь тот же размер в первой размерности.

    • Все выходные параметры [a, b, c, ...] вертикально конкатенированы с соответствующими результатами предыдущих вызовов fcn.

    • Все выходные параметры [a, b, c, ...] отправляются в тот же индекс в первой размерности в их соответствующих целевых выходных массивах.

  3. Функциональные Правилаfcn должен удовлетворить функциональное правило:

    • F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]: Применение функции к конкатенации входных параметров должно совпасть с применением функции к входным параметрам отдельно и затем конкатенации результатов.

  4. Пустые Входные параметры — Гарантируют, что fcn может обработать вход, который имеет высоту 0. Пустые входные параметры могут произойти, когда файл пуст или если вы сделали большую фильтрацию на данных.

Например, эта функция вычисляет среднее и стандартное отклонение элементов в окне и возвращает два выходных массива:

function [mv,sd] = movstats(tX)
mv = mean(tX,1,'omitnan');
sd = std(tX,1,'omitnan');
end
После того, как вы сохраните эту функцию в доступную папку, можно вызвать функцию с размером окна 5 использований этой команды:
[tA,tB] = matlab.tall.movingWindow(@movstats,5,tX)

Пример: tA = matlab.tall.movingWindow(@(x) std(x,1,'omitnan'), tX) задает анонимную функцию, чтобы вычислить стандартное отклонение каждого окна, игнорируя NaN s.

Пример: tA = matlab.tall.movingWindow(@mean,3,tX) задает указатель на функцию @mean, чтобы вычислить среднее значение каждого трехэлементного окна.

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

Размер окна, заданный как положительный целочисленный скаляр или двухэлементный вектор - строка [NB NF].

  • Если window является скаляром, то:

    • Когда размер окна нечетен, каждое окно сосредоточено на соответствующем элементе в данных.

    • Когда размер окна даже, каждое окно сосредоточено о текущих и предыдущих элементах.

  • Если window является векторный [NB NF], то окно включает предыдущие элементы NB, текущий элемент и следующие элементы NF входных параметров.

По умолчанию размер окна является автоматически усеченным в конечных точках, если не достаточно элементов доступно, чтобы заполнить окно. Когда окно является усеченным этим способом, функция работает только с элементами, которые заполняют окно. Можно изменить это поведение с парой "имя-значение" EndPoints.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Входные массивы, заданные в качестве отдельных аргументов скаляров, векторов, матриц, многомерных массивов, таблиц или расписаний. Входные массивы могут быть высокими или массивами в оперативной памяти. Входные массивы используются в качестве входных параметров к функции преобразования fcn. Каждый входной массив tX,tY,... должен иметь совместимые высоты. Два входных параметров имеют совместимую высоту, когда у них есть та же высота, или когда один вход имеет высоту 1.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: tA = matlab.tall.movingWindow(@myFcn, window, tX, 'Stride', 2)

Размер шага между окнами, заданными как пара, разделенная запятой, состоящая из 'Stride' и положительного целочисленного скаляра. После того, как fcn работает с окном данных, усовершенствований вычисления значением 'Stride' прежде, чем работать со следующим окном. Увеличение значения 'Stride' от значения по умолчанию 1 совпадает с сокращением размера вывода путем выбирания любого элемента или каждого третьего элемента, и так далее.

По умолчанию значением 'Stride' является 1, так, чтобы каждое окно было сосредоточено на каждом элементе во входе. Например, вот движущееся вычисление суммы с размером окна 3 работ на векторном [1 2 3 4 5 6]':

Если значением 'Stride' является 2, то вычисление изменяется так, чтобы каждое окно было сосредоточено на каждом втором элементе во входе (1, 3, 5). Движущаяся сумма теперь возвращает три частичных суммы, а не шесть:

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Метод, чтобы обработать ведущие и запаздывающие окна, заданные как пара, разделенная запятой, состоящая из 'EndPoints' и одно из значений в таблице.

Вначале и конец оконного вычисления, окно управляющихся элементов является неполным. Опция 'EndPoints' задает, как обработать эти неполные окна.

Значение 'EndPoints'ОписаниеПример: перемещение суммы

'shrink'

Уменьшите размер окна около конечных точек входа, чтобы включать только существующие элементы.

'discard'

Не выводите результаты, где окно не полностью накладывается с существующими элементами.

Числовое или логическое дополнительное значение

Замените несуществующими элементами с заданным числовым или логическим значением.

  • Дополнительное значение должно иметь тот же тип как tX.

  • Размер дополнительного значения в первой размерности должен быть равен 1, и размер в других размерностях должен совпадать с tX.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Прототип выходных массивов, заданных как пара, разделенная запятой, состоящая из 'OutputsLike' и массива ячеек, содержащего прототипные массивы. Когда вы задаете 'OutputsLike', выходные массивы, tA,tB,..., возвращенный matlab.tall.movingWindow, имеет совпадающие типы данных и атрибуты как заданные прототипные массивы {PA,PB,...}. Необходимо задать 'OutputsLike' каждый раз, когда тип данных выходного массива отличается, чем тот из входного массива. Если вы задаете 'OutputsLike', то необходимо задать прототипный массив для каждого вывода.

Пример: tA = matlab.tall.movingWindow(..., tX, 'OutputsLike', {int8(1)});, где tX является длинным массивом двойной точности, возвращает tA как int8 вместо double.

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

Выходные аргументы

свернуть все

Выходные массивы, возвращенные как скаляры, векторы, матрицы или многомерные массивы. Если какой-либо вход к matlab.tall.movingWindow высок, то все выходные аргументы также высоки. В противном случае всеми выходными аргументами являются массивы в оперативной памяти.

  • Размер и тип данных выходных массивов зависят от заданной функции окна fcn.

  • В целом выходные параметры tA,tB,... должны все иметь совпадающий тип данных как первый вход tX. Однако можно задать 'OutputsLike', чтобы возвратить различные типы данных.

  • tA,tB,... выходных массивов у всех есть та же высота, которая зависит от значения 'Stride' и 'EndPoints'. По умолчанию выходные массивы одного размера как входные массивы.

Советы

  • Используйте matlab.tall.movingWindow для простых вычислений раздвижного окна. matlab.tall.blockMovingWindow является усовершенствованным API, разработанным, чтобы обеспечить больше гибкости, чтобы выполнить вычисления раздвижного окна на длинных массивах. По сути, это более сложно, чтобы использовать, поскольку функции должны точно обработать блоки данных, которые содержат много полных окон. Однако с правильно векторизованными вычислениями, можно сократить необходимое количество вызовов функции и улучшать производительность.

Введенный в R2019a