Применить функцию окна для блоков данных
[
, где 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.9 sec - Pass 2 of 2: Completed in 1 min 6 sec Evaluation completed in 1 min 8 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
- 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 = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmdn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmd = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
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
— Функция окна, чтобы применятьсяФункция окна, чтобы применяться, определенный функцией указатель или анонимная функция. Каждый выход fcn
должен быть тот же тип как первый вход tX
. Можно использовать 'OutputsLike'
опция, чтобы возвратить выходные параметры различных типов данных.
Общая функциональная подпись fcn
[a, b, c, ...] = fcn(x, y, z, ...)
fcn
должен удовлетворить этим требованиям:
Входные параметры — входные параметры [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
должен привести к сокращению входных данных в каждом из его столбцов или переменных.
Выходные аргументы Выходные параметры [a, b, c, ...]
блоки, которые умещаются в памяти, чтобы быть отправленными в соответствующие выходные параметры [tA, tB, tC, ...]
. Выходные параметры [a, b, c, ...]
удовлетворите этим свойствам:
Все выходные параметры [a, b, c, ...]
должен иметь тот же размер в первой размерности.
Все выходные параметры [a, b, c, ...]
вертикально конкатенированы с соответствующими результатами предыдущих вызовов fcn
.
Все выходные параметры [a, b, c, ...]
отправляются в тот же индекс в первой размерности в их соответствующих целевых выходных массивах.
Функциональные правила — fcn
должен удовлетворить функциональному правилу:
F([inputs1; inputs2]) == [F(inputs1); F(inputs2)]
: Применение функции к конкатенации входных параметров должно совпасть с применением функции к входным параметрам отдельно и затем конкатенации результатов.
Например, эта функция вычисляет среднее и стандартное отклонение элементов в окне и возвращает два выходных массива:
function [mv,sd] = movstats(tX) mv = mean(tX,1,'omitnan'); sd = std(tX,1,'omitnan'); end
[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
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.movingWindow(@myFcn, window, tX, 'Stride', 2)
'Stride'
— Размер шага между окнами
(значение по умолчанию) | положительный целочисленный скалярРазмер шага между окнами, заданными как разделенная запятой пара, состоящая из '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'
, затем необходимо задать прототипный массив для каждого выхода.
Прототипные массивы {PA,PB,...}
то, что вы задаете, должно иметь совпадающий тип данных и невысокие размеры размерности как соответствующие выходные массивы.
Пример: tA = matlab.tall.movingWindow(..., tX, 'OutputsLike', {int8(1)});
, где tX
длинный массив двойной точности, возвращает tA
как int8
вместо double
.
Типы данных: cell
tA
, tB
— Выходные массивыВыходные массивы, возвращенные как скаляры, векторы, матрицы или многомерные массивы. Если любой вход к matlab.tall.movingWindow
высоко, затем все выходные аргументы также высоки. В противном случае всеми выходными аргументами являются массивы в оперативной памяти.
Размер и тип данных выходных массивов зависят от заданной функции окна fcn
.
Выходные массивы tA,tB,...
у всех есть та же высота, которая зависит от значения 'Stride'
и 'EndPoints'
. По умолчанию выходные массивы одного размера с входными массивами.
В общем случае выходные параметры tA,tB,...
должен все иметь совпадающий тип данных как первый вход tX
. Однако можно задать 'OutputsLike'
возвратить различные типы данных. В случаях, где входные массивы tX, tY, ...
пусты, или когда 'EndPoints'
'discard'
и существует недостаточно элементов, чтобы заполнить полноразмерное окно, matlab.tall.movingWindow
возвращает пустые выходные параметры. Размеры пустых выходных параметров основаны на размере входного массива tX
, или на размерах прототипных массивов, предоставленных 'OutputsLike'
, если задано.
Используйте matlab.tall.movingWindow
для простых вычислений раздвижного окна. matlab.tall.blockMovingWindow
усовершенствованный API, спроектированный, чтобы обеспечить больше гибкости, чтобы выполнить вычисления раздвижного окна на длинных массивах. По сути, это более сложно, чтобы использовать, поскольку функции должны точно обработать блоки данных, которые содержат много полных окон. Однако с правильно векторизованными вычислениями, можно сократить необходимое количество вызовов функции и улучшать производительность.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.