matlab.tall.blockMovingWindow

Применить функцию окна и блочное сокращение к заполненным блокам данных

Описание

пример

tA = matlab.tall.blockMovingWindow(windowfcn,blockfcn,window,tX) применяется blockfcn для заполнения окон данных и windowfcn к неполным окнам данных рядом с ребрами. window задает размер раздвижного окна. Результат содержит вертикальную конкатенацию применения blockfcn и windowfcn в эти окна данных.

пример

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

  • windowfcn и blockfcn необходимо вернуть то же количество выходов, что и запрашивалось у matlab.tall.blockMovingWindow.

  • Каждый выход windowfcn и blockfcn должен быть того же типа, что и первый вход данных tX.

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

пример

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

Примеры

свернуть все

Использование matlab.tall.blockMovingWindow вычислить скользящего среднего значения прибытия авиакомпании и задержек вылета.

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

varnames = {'ArrDelay', 'DepDelay'};
ds = tabularTextDatastore('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.blockMovingWindow вычислить скользящее среднее значение данных в первой размерности с размером окна 10. Начиная с windowfcn применяется только к отдельным окнам данных, можно использовать mean функция для сокращения окон данных в матрицу с одной строкой. The blockfcn применяется к целым блокам данных, поэтому используйте movmean функция для вычисления среднего значения каждого полного окна данных в блоках.

windowfcn = @(info,x) mean(x,1,'omitnan');
blockfcn = @(info,x) movmean(x,info.Window,1,'omitnan','EndPoints','discard');
A = matlab.tall.blockMovingWindow(windowfcn, blockfcn, 10, tX)
A =

  MxNx... tall double array

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

Соберите фрагмент результатов в память.

gather(A(1:10,:))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 1.1 sec
- Pass 2 of 2: Completed in 4.9 sec
Evaluation completed in 6.6 sec
ans = 10×2

   10.8000    8.8000
   18.8333   17.8333
   16.5714   15.0000
   15.8750   13.0000
   14.4444   11.8889
   13.2000   10.8000
   14.0000   11.1000
   13.5000   11.9000
   15.3000   11.4000
   19.7000   13.4000

Вычислите статистику перемещений по переменным таблицы.

Загрузите outages.csv набор данных как длинная таблица. Данные содержат информацию об отключении степени.

T = tall(readtable('outages.csv'))
T =

  1,468x6 tall table

       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }
    {'West'     }    2003-06-18 02:49         0             0    2003-06-18 10:54    {'attack'         }
    {'West'     }    2004-06-20 14:39    231.29           NaN    2004-06-20 19:16    {'equipment fault'}
    {'West'     }    2002-06-06 19:28    311.86           NaN    2002-06-07 00:51    {'equipment fault'}
          :                 :              :           :                :                     :
          :                 :              :           :                :                     :

Использование matlab.tall.blockMovingWindow применить функцию окна для блоков длинная таблица. Задайте следующие опции:

  • blkstats как блочная функция для работы с полными блоками данных (включенная в конец примера в качестве локальной функции).

  • Размер окна 50 и шаг 5.

  • EndPoints как 'discard' чтобы игнорировать неполные окна данных. С этим значением, windowfcn вход может быть задан как пустой [] поскольку эксплуатируются только полные окна данных.

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

[A, B] = matlab.tall.blockMovingWindow([], @blkstats, 50, T, 'Stride', 5, ...
    'EndPoints', 'discard', 'OutputsLike', {1, 1});

Предварительный просмотр нескольких строк результатов.

[A,B] = gather(head(A),head(B))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.43 sec
- Pass 2 of 2: Completed in 0.52 sec
Evaluation completed in 1.5 sec
A = 8×1

  254.0861
  254.0861
  340.3499
  452.0191
  464.8524
  471.9737
  464.8524
  464.8524

B = 8×1
105 ×

    1.3447
    1.0779
    1.4227
    1.4509
    1.2888
    1.2888
    1.2308
    1.3722

The blkstats функция вычисляет скользящее медианное значение Loss и Customers табличные переменные в первой размерности с использованием заданного размера окна. Функция применяет Stride значение, чтобы уменьшить размер выхода, и затем оно возвращает результаты как два вектора.

function [out1, out2] = blkstats(info, t)
    a = movmedian([t.Loss t.Customers], info.Window, 1, 'omitnan', 'EndPoints', 'discard');
    a = a(1:info.Stride:end, :);
    out1 = a(:,1);
    out2 = a(:,2);
end

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

свернуть все

Функция для применения к неполным окнам данных, заданная как указатель на функцию, анонимная функция или []. windowfcn вызывается один раз в неполное окно, когда вычисление перемещается по данным в tall размерности. matlab.tall.blockMovingWindow применяется windowfcn только когда 'EndPoints' имеет значение по умолчанию 'shrink'. Если вы задаете другое значение для 'EndPoints', затем установите windowfcn на [].

Каждый выход windowfcn должен быть того же типа, что и первый вход данных tX. Можно использовать 'OutputsLike' опция для возврата выходов различных типов данных.

Общая функциональная подпись windowfcn является

[a, b, c, ...] = windowfcn(info, x, y, ...)
The info вход является структурой, обеспечиваемой matlab.tall.blockMovingWindow который включает в себя следующие поля:

  • Stride - Заданный размер шага между окнами (по умолчанию: 1). Установите это значение с помощью 'Stride' Пара "имя-значение".

  • Window - Заданный размер окна. Установите это значение с помощью window входной параметр.

windowfcn должны удовлетворять этим требованиям:

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

    • Все входы [x, y, z, ...] иметь тот же размер в первой размерности.

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

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

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

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

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

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

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

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

  3. Функциональные правила - windowfcn должен удовлетворять этому функциональному правилу:

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

Пример: A = matlab.tall.blockMovingWindow(@windowfcn, @blockfcn, 10, tX)

Пример: A = matlab.tall.blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')

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

Функция для применения к блокам данных, заданная как указатель на функцию или анонимная функция. blockfcn применяется к блокам данных, которые содержат полные окна данных. Таким образом, blockfcn должна работать векторизированно на целых блоках данных и возвращать выход, который имеет соответствующий размер для заданного размера окна и шага.

Каждый выход blockfcn должен быть того же типа, что и первый вход данных tX. Можно использовать 'OutputsLike' опция для возврата выходов различных типов данных.

matlab.tall.blockMovingWindow применяется blockfcn для блоков данных каждый раз, когда блок содержит только полные окна:

  • Для средних блоков при 'EndPoints' установлено в 'shrink' (поведение по умолчанию). В этом случае windowfcn работает с неполными окнами данных на концах.

  • Для всех блоков при 'EndPoints' установлено в 'discard' или значение заполнения.

Общая функциональная подпись blockfcn является

[a, b, c, ...] = blockfcn(info, bX, bY, bZ, ...)
The info вход является структурой, обеспечиваемой matlab.tall.blockMovingWindow который включает в себя следующие поля:

  • Stride - Заданный размер шага между окнами (по умолчанию: 1). Установите это значение с помощью 'Stride' Пара "имя-значение".

  • Window - Заданный размер окна. Установите это значение с помощью window входной параметр.

Блоки данных bX, bY, bZ, ... это matlab.tall.blockMovingWindow обеспечивает blockfcn имеют следующие свойства:

  • Блоки содержат только полноразмерные окна. blockfcn не должен задавать поведение для неполных окон данных.

  • Первое окно данных начинается с первого элемента блока. Последний элемент последнего окна является последним элементом блока.

blockfcn должны удовлетворять этим требованиям:

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

    • Все входы [bX, bY, bZ, ...] иметь тот же размер в первой размерности после любого допустимого расширения.

    • Блоки данных в [bX, bY, bZ, ...] происходит от того же индекса в tall размерности, принимая, что длинный массив является nonsingleton в tall размерности. Для примера, если tX и tY nonsingleton в tall размерности, тогда первый набор блоков может быть bX = tX(1:20000,:) и bY = tY(1:20000,:).

    • Если первая размерность любого из входов данных [tX, tY, tZ, ...] имеет размер 1, затем соответствующий блок [bX, bY, bZ, ...] состоит из всех данных в этот длинный массив.

    • Применение blockfcn должно привести к сокращению входных данных таким образом, чтобы результат имел высоту, равную количеству окон в блоке. Можно использовать info.Window и info.Stride для определения количества окон в блоке.

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

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

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

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

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

  3. Функциональные правила - blockfcn должен удовлетворять этому функциональному правилу:

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

Пример: A = matlab.tall.blockMovingWindow(@windowfcn, @blockfcn, 10, tX)

Пример: A = matlab.tall.blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')

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

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

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

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: tA = matlab.tall.blockMovingWindow(@windowfcn, blockfcn, 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' и одно из значений в таблице.

В начале и конце оконного вычисления окно управляемых элементов является неполным. The '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.blockMovingWindow имеют те совпадающие типы данных и атрибуты, что и указанные прототипные массивы {PA,PB,...}. Вы должны задать 'OutputsLike' каждый раз, когда тип данных массива выхода отличается от типа данных массива входов. Если вы задаете 'OutputsLike', затем необходимо задать прототипный массив для каждого выхода.

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

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

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

свернуть все

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

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

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

  • В целом выходы tA,tB,... все должны иметь тот совпадающий тип данных, что и первый вход данных tX. Однако можно задать 'OutputsLike' для возврата различных типов данных. В случаях, когда входные массивы tX, tY, ... пусты, или когда 'EndPoints' является 'discard' и не хватает элементов, чтобы заполнить полноразмерное окно, matlab.tall.blockMovingWindow возвращает пустые выходы. Размеры пустых выходов основаны на размере входного массива tX, или от размеров прототипных массивов, предоставляемых 'OutputsLike', если задан.

Совет

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

Введенный в R2019a
Для просмотра документации необходимо авторизоваться на сайте