Применение функции движущегося окна и сокращения блоков к дополненным блокам данных
[, где 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 для расчета среднего скользящего значения задержек прибытия и вылета авиакомпании.
Создание хранилища данных для 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.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 для применения функции moving-window к блокам таблицы высокого уровня. Укажите следующие параметры:
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
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. Вы можете использовать 'OutputsLike' для возврата выходов различных типов данных.
Общая функциональная подпись windowfcn является
[a, b, c, ...] = windowfcn(info, x, y, ...)
info input - это структура, обеспечиваемая 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 nonsingleton в высоком измерении, то первый набор блоков может быть 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)]Применение функции к конкатенации входов должно быть таким же, как применение функции к входам по отдельности, а затем к конкатенации результатов.
Пример: A = matlab.tall.blockMovingWindow(@windowfcn, @blockfcn, 10, tX)
Пример: A = matlab.tall.blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')
Типы данных: function_handle
blockfcn - Функция, применяемая к блокам данныхФункция, применяемая к блокам данных, заданным как дескриптор функции или анонимная функция. blockfcn применяется к блокам данных, содержащим полные окна данных. Таким образом, blockfcn должен работать векторизированным образом на целых блоках данных и возвращаемых выходных данных, имеющих соответствующий размер для указанного размера окна и шага.
Каждый выход blockfcn должен быть того же типа, что и первый ввод данных tX. Вы можете использовать 'OutputsLike' для возврата выходов различных типов данных.
matlab.tall.blockMovingWindow применяется blockfcn к блокам данных, когда блок содержит только завершенные окна:
Для средних блоков, когда 'EndPoints' имеет значение 'shrink' (поведение по умолчанию). В этом случае windowfcn работает на неполных окнах данных на концах.
Для всех блоков, когда 'EndPoints' имеет значение 'discard' или значение заполнения.
Общая функциональная подпись blockfcn является
[a, b, c, ...] = blockfcn(info, bX, bY, bZ, ...)
info input - это структура, обеспечиваемая 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 nonsingleton в высоком измерении, то первый набор блоков может быть 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)]Применение функции к конкатенации входов должно быть таким же, как применение функции к входам по отдельности, а затем к конкатенации результатов.
Пример: 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,... должна иметь одинаковую высоту.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. 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.blockMovingWindow имеют те же типы данных и атрибуты, что и указанные массивы прототипов {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,... все имеют одинаковую высоту, которая зависит от значения 'Stride' и 'EndPoints'. По умолчанию выходные массивы имеют тот же размер, что и входные массивы.
В целом, выходные данные tA,tB,... все должны иметь тот же тип данных, что и первый ввод данных tX. Однако можно указать 'OutputsLike' для возврата различных типов данных. В случаях, когда входные массивы tX, tY, ... пусты или когда 'EndPoints' является 'discard' и недостаточно элементов для заполнения полноразмерного окна, matlab.tall.blockMovingWindow возвращает пустые выходные данные. Размеры пустых выходов основаны на размере входного массива tXили о размерах массивов прототипов, предоставленных 'OutputsLike', если указано.
Использовать matlab.tall.movingWindow для простых расчетов скользящего окна. matlab.tall.blockMovingWindow представляет собой усовершенствованный API, предназначенный для обеспечения большей гибкости при выполнении расчетов с использованием скользящих окон в массивах tall. Как таковое, это сложнее использовать, так как функции должны точно обрабатывать блоки данных, которые содержат много полных окон. Однако правильно векторизированные вычисления позволяют сократить необходимое количество вызовов функций и повысить производительность.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.