Применить функцию окна и блочное сокращение к заполненным блокам данных
tA = matlab.tall.blockMovingWindow(windowfcn,blockfcn,window,tX)
[tA,tB,...] = matlab.tall.blockMovingWindow(windowfcn,blockfcn,window,tX,tY,...)
[___] = matlab.tall.blockMovingWindow(___,Name,Value)
[
, то, где 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 = 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.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 0.87 sec - Pass 2 of 2: Completed in 5.4 sec Evaluation completed in 6.8 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
так, чтобы функция разрешила это изменение в типе данных и размере.
info = struct('Window',1,'Stride',1); [proto1, proto2] = blkstats(info,T); [A, B] = matlab.tall.blockMovingWindow([], @blkstats, 50, T, 'Stride', 5, ... 'EndPoints', 'discard', 'OutputsLike', {proto1, proto2});
Предварительный просмотр несколько строк в результатах.
[A,B] = gather(head(A),head(B))
Evaluating tall expression using the Local MATLAB Session: Evaluation completed in 1.4 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
— Функция, чтобы примениться к неполным окнам данных[]
Функция, чтобы примениться к неполным окнам данных, заданных как указатель на функцию, анонимная функция или []
. 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
должен удовлетворить эти требования:
Входные параметры — входные параметры [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
должно привести к сокращению входных данных в каждом из его столбцов или переменных.
Выходные аргументы Выходные параметры [a, b, c, ...]
являются блоками, которые умещаются в памяти, чтобы быть отправленными в соответствующие выходные параметры [tA, tB, tC, ...]
. Выходные параметры [a, b, c, ...]
удовлетворяют эти свойства:
Все выходные параметры [a, b, c, ...]
должны иметь тот же размер в первой размерности.
Все выходные параметры [a, b, c, ...]
вертикально конкатенированы с соответствующими результатами предыдущих вызовов windowfcn
.
Все выходные параметры [a, b, c, ...]
отправляются в тот же индекс в первой размерности в их соответствующих целевых выходных массивах.
Функциональные Правила — windowfcn
должен удовлетворить это функциональное правило:
F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]
: Применение функции к конкатенации входных параметров должно совпасть с применением функции к входным параметрам отдельно и затем конкатенации результатов.
Пустые Входные параметры — Гарантируют, что windowfcn
может обработать вход, который имеет высоту 0. Пустые входные параметры могут произойти, когда файл пуст или если вы сделали большую фильтрацию на данных.
Пример: A = matlab.tall.blockMovingWindow(@windowfcn, @blockfcn, 10, tX)
Пример: A = matlab.tall.blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')
Типы данных: function_handle
blockfcn
— Функция, чтобы примениться к блокам данныхФункция, чтобы примениться к блокам данных, заданным как указатель на функцию или анонимная функция. 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
должен удовлетворить эти требования:
Входные параметры — входные параметры [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
должно привести к сокращению входных данных в каждом из его столбцов или переменных.
Выходные аргументы Выходные параметры [a, b, c, ...]
являются блоками, которые умещаются в памяти, чтобы быть отправленными в соответствующие выходные параметры [tA, tB, tC, ...]
. Выходные параметры [a, b, c, ...]
удовлетворяют эти свойства:
Все выходные параметры [a, b, c, ...]
должны иметь тот же размер в первой размерности.
Все выходные параметры [a, b, c, ...]
вертикально конкатенированы с соответствующими результатами предыдущих вызовов blockfcn
.
Все выходные параметры [a, b, c, ...]
отправляются в тот же индекс в первой размерности в их соответствующих целевых выходных массивах.
Функциональные Правила — blockfcn
должен удовлетворить это функциональное правило:
F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]
: Применение функции к конкатенации входных параметров должно совпасть с применением функции к входным параметрам отдельно и затем конкатенации результатов.
Пустые Входные параметры — Гарантируют, что blockfcn
может обработать вход, который имеет высоту 0. Пустые входные параметры могут произойти, когда файл пуст или если вы сделали большую фильтрацию на данных.
Пример: A = matlab.tall.blockMovingWindow(@windowfcn, @blockfcn, 10, tX)
Пример: A = matlab.tall.blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')
Типы данных: function_handle
window
— Размер окнаРазмер окна, заданный как положительный целочисленный скаляр или двухэлементный вектор - строка [NB NF]
.
Если window
является скаляром, то:
Когда размер окна нечетен, каждое окно сосредоточено на соответствующем элементе в данных.
Когда размер окна даже, каждое окно сосредоточено о текущих и предыдущих элементах.
Если window
является векторный [NB NF]
, то окно включает предыдущие элементы NB
, текущий элемент и следующие элементы NF
входных параметров.
По умолчанию размер окна является автоматически усеченным в конечных точках, если не достаточно элементов доступно, чтобы заполнить окно. Когда окно является усеченным этим способом, функция работает только с элементами, которые заполняют окно. Можно изменить это поведение с парой "имя-значение" EndPoints
.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
tX
, tY
— Входные массивы (в качестве отдельных аргументов)Входные массивы, заданные в качестве отдельных аргументов скаляров, векторов, матриц, многомерных массивов, таблиц или расписаний. Входные массивы могут быть высокими или массивами в оперативной памяти. Входные массивы используются в качестве входных параметров к функции преобразования fcn
. Каждый входной массив tX,tY,...
должен иметь совместимые высоты. Два входных параметров имеют совместимую высоту, когда у них есть та же высота, или когда один вход имеет высоту 1.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
tA = matlab.tall.blockMovingWindow(@windowfcn, blockfcn, window, tX, 'Stride', 2)
'Stride'
— Размер шага между окнами1
(значение по умолчанию) | положительный целочисленный скалярРазмер шага между окнами, заданными как пара, разделенная запятой, состоящая из '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'
— Метод, чтобы обработать ведущие и запаздывающие окна'shrink'
(значение по умолчанию) | 'discard'
| дополнение значенияМетод, чтобы обработать ведущие и запаздывающие окна, заданные как пара, разделенная запятой, состоящая из 'EndPoints'
и одно из значений в таблице.
Вначале и конец оконного вычисления, окно управляющихся элементов является неполным. Опция 'EndPoints'
задает, как обработать эти неполные окна.
Значение 'EndPoints' | Описание | Пример: перемещение суммы |
---|---|---|
| Уменьшите размер окна около конечных точек входа, чтобы включать только существующие элементы. | |
| Не выводите результаты, где окно не полностью накладывается с существующими элементами. | |
Числовое или логическое дополнительное значение | Замените несуществующими элементами с заданным числовым или логическим значением.
|
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
'OutputsLike'
— Прототип выходных массивовПрототип выходных массивов, заданных как пара, разделенная запятой, состоящая из 'OutputsLike'
и массива ячеек, содержащего прототипные массивы. Когда вы задаете 'OutputsLike'
, выходные массивы, tA,tB,...
, возвращенный matlab.tall.movingWindow
, имеет совпадающие типы данных и атрибуты как заданные прототипные массивы {PA,PB,...}
. Необходимо задать 'OutputsLike'
каждый раз, когда тип данных выходного массива отличается, чем тот из входного массива. Если вы задаете 'OutputsLike'
, то необходимо задать прототипный массив для каждого вывода.
Пример: tA = matlab.tall.blockMovingWindow(..., tX, 'OutputsLike', {int8(1)});
, где tX
является длинным массивом двойной точности, возвращает tA
как int8
вместо double
.
Типы данных: cell
tA
, tB
— Выходные массивыВыходные массивы, возвращенные как скаляры, векторы, матрицы или многомерные массивы. Если какой-либо вход к matlab.tall.blockMovingWindow
высок, то все выходные аргументы также высоки. В противном случае всеми выходными аргументами являются массивы в оперативной памяти.
Размер и тип данных выходных массивов зависят от заданных функций окна windowfcn
и blockfcn
.
В целом выходные параметры tA,tB,...
должны все иметь совпадающий тип данных как вход tX
First Data. Однако можно задать 'OutputsLike'
, чтобы возвратить различные типы данных.
tA,tB,...
выходных массивов у всех есть та же высота, которая зависит от значения 'Stride'
и 'EndPoints'
. По умолчанию выходные массивы одного размера как входные массивы.
Используйте matlab.tall.movingWindow
для простых вычислений раздвижного окна. matlab.tall.blockMovingWindow
является усовершенствованным API, разработанным, чтобы обеспечить больше гибкости, чтобы выполнить вычисления раздвижного окна на длинных массивах. По сути, это более сложно, чтобы использовать, поскольку функции должны точно обработать блоки данных, которые содержат много полных окон. Однако с правильно векторизованными вычислениями, можно сократить необходимое количество вызовов функции и улучшать производительность.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.