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 First Data.

  • Все выходные параметры 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 функция, чтобы уменьшать окна данных вниз в матрицу с одной строкой. 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.2 sec
- Pass 2 of 2: Completed in 5.5 sec
Evaluation completed in 7.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.42 sec
- Pass 2 of 2: Completed in 0.61 sec
Evaluation completed in 1.6 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

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 вызывается однажды на неполное окно, когда вычисление отодвигается данные в высокой размерности. matlab.tall.blockMovingWindow применяет windowfcn только, когда 'EndPoints' имеет значение по умолчанию 'shrink'. Если вы задаете различное значение для 'EndPoints', затем установите windowfcn к [].

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

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

[a, b, c, ...] = windowfcn(info, x, y, ...)
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, ...] произойдите из того же индекса в высокой размерности, приняв, что длинный массив является неодиночным элементом в высокой размерности. Например, если tX и tY неодиночный элемент в высокой размерности, затем первым набором блоков может быть 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 First Data. Можно использовать 'OutputsLike' опция, чтобы возвратить выходные параметры различных типов данных.

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

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

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

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

[a, b, c, ...] = blockfcn(info, bX, bY, bZ, ...)
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, ...] произойдите из того же индекса в высокой размерности, приняв, что длинный массив является неодиночным элементом в высокой размерности. Например, если tX и tY неодиночный элемент в высокой размерности, затем первым набором блоков может быть 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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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' и одно из значений в таблице.

Вначале и конец оконного вычисления, окно управляющихся элементов является неполным. '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 высоко, затем все выходные аргументы также высоки. В противном случае всеми выходными аргументами являются массивы в оперативной памяти.

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

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

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

Советы

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

Введенный в R2019a