Документация Engee

movmean

Скользящее среднее.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • M = movmean(A,k) — возвращает локальные средние значения по k точкам, где каждое среднее вычисляется в скользящем окне длины k, которое перемещается по соседним элементам массива A. Если k нечетное, окно центрируется относительно элемента в текущей позиции. Если k четное, окно центрируется относительно текущего и предыдущего элементов. Размер окна автоматически усекается в конечных точках, когда элементов недостаточно для его заполнения. При усечении окна среднее значение берется только для элементов, заполняющих окно. M имеет тот же размер, что и A.

    • Если A — вектор, то movmean действует по длине вектора A.

    • Если A — многомерный массив, то movmean действует по первому измерению A, размер которого не равен 1.

  • M = movmean(A,[kb kf]) — вычисляет среднее значение с окном длины kb + kf + 1, которое включает элемент в текущей позиции, kb элементов назад и kf элементов вперед.

  • M = movmean(___,dim) — определяет размерность матрицы A, по которой выполняется операция для любого из предыдущих вариантов синтаксиса. Например, если A — матрица, то movmean(A,k,2) выполняет операцию по столбцам матрицы A, вычисляя скользящее среднее по k элементам для каждой строки.

  • M = movmean(___,nanflag) — определяет, следует ли включать или исключать значения NaN в массив A. Например, movmean(A,k,"omitnan") игнорирует значения NaN при вычислении каждого среднего. По умолчанию movmean включает значения NaN.

  • M = movmean(___,Name,Value) — задает дополнительные параметры скользящего среднего, используя один или несколько аргументов типа «имя-значение». Например, если x — вектор значений времени, то movmean(A,k,"SamplePoints",x) вычисляет скользящее среднее относительно значений времени в x.

Аргументы

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

# A — входные данные
вектор | матрица | многомерный массив

Details

Входные данные, заданные как вектор, матрица или многомерный массив.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64, Bool

# k — длина окна
скаляр

Details

Длина окна, заданная как скаляр. Если k — положительное целое число, центрированное среднее включает элемент в текущей позиции и его соседей.

Например, movmean(A,3) вычисляет массив значений локального трехточечного среднего.

movmean 1

# [kb kf] — длина направленного окна
двухэлементный вектор-строка

Details

Длина направленного окна, заданная как вектор-строка, содержащий два элемента. Если kb и kf — положительные целые числа, вычисление выполняется по kb + kf + 1 элементам. Вычисление включает элемент в текущей позиции, kb элементов до текущей позиции и kf элементов после текущей позиции.

Например, movmean(A,[2 1]) вычисляет массив значений локального четырехточечного среднего.

movmean 2

# dim — измерение, вдоль которого выполняется операция
положительный целочисленный скаляр

Details

Измерение, вдоль которого выполняется операция, заданное как положительный целочисленный скаляр. Если измерение не указано, по умолчанию используется первое измерение массива, размер которого не равен 1.

Аргумент dim указывает измерение, вдоль которого выполняется функция movmean, то есть направление, в котором перемещается указанное окно.

Рассмотрим входную матрицу A размером m на n:

  • movmean(A,k,1) вычисляет скользящее среднее по k элементам для каждого столбца матрицы A и возвращает матрицу размером m на n.

    movmean 3

  • movmean(A,k,2) вычисляет скользящее среднее по k элементам для каждой строки матрицы A и возвращает матрицу размером m на n.

    movmean 4

# nanflag — условие отсутствия значения
"includemissing" (по умолчанию) | "includenan" | "omitmissing" | "omitnan"

Details

Условие обработки пропущенного значения, заданное одним из следующих значений:

  • "includemissing" или "includenan" — включить значения NaN в A при вычислении каждого среднего. Если какой-либо элемент в окне — NaN, то соответствующий элемент в MNaN. Значения "includemissing" и "includenan" ведут себя одинаково.

  • "omitmissing" или "omitnan" — игнорировать все значения NaN в A и вычислять каждое среднее по меньшему количеству точек. Если все элементы в окне — NaN, то соответствующий элемент в MNaN. Значения "omitmissing" и "omitnan" ведут себя одинаково.

Входные аргументы «имя-значение»

Укажите необязательные пары аргументов в формате Name, Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.

Используйте запятые для разделения имени и значения, а Name заключите в кавычки.

Пример: M = movmean(A, k, "Endpoints", "fill")

# Endpoints — метод обработки окон вблизи конечных точек
"shrink" (по умолчанию) | "discard" | "fill" | скаляр

Details

Метод обработки окон вблизи конечных точек, заданный одним из следующих вариантов:

Значение Описание

"shrink"

Уменьшить размер окна вблизи конечных точек входных данных, чтобы включить только существующие элементы.

"discard"

Не выводить никакие средние значения, если окно не полностью перекрывает существующие элементы.

"fill"

Заменить несуществующие элементы на NaN.

скаляр

Заменить несуществующие элементы указанным числовым или логическим значением.

# SamplePoints — точки выборки для вычисления средних значений
вектор

Details

Точки выборки для вычисления средних значений, заданные как вектор. Точки выборки представляют собой местоположение данных в A. Точки выборки не обязательно должны быть равномерно распределены. По умолчанию вектор точек выборки имеет вид [1 2 3 …​ ].

Скользящие окна определяются относительно точек выборки, которые должны быть отсортированы и содержать уникальные элементы. Например, если t — вектор времени, соответствующий входным данным, то movmean(rand(1, 10), 3, "SamplePoints", t) имеет окно, представляющее временной интервал между t[i] − 1.5 и t[i] + 1.5.

Если точки выборки расположены неравномерно и задан параметр Endpoints, то его значение должно быть "shrink".

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

# M — выходные данные
вектор | матрица | многомерный массив

Details

Выходные данные, возвращаемые в виде вектора, матрицы или многомерного массива.

Примеры

Центрированное скользящее среднее вектора

Details

Вычислим трехточечное центрированное скользящее среднее вектора-строки. Если в окне меньше трех элементов в конечных точках, возьмем среднее по доступным элементам.

import EngeeDSP.Functions: movmean

A = [4 8 6 -1 -2 -3 -1 3 4 5]
M = movmean(A, 3)
1×10 Matrix{Float64}:
 6.0  6.0  4.33333  1.0  -2.0  -2.0  -0.333333  2.0  4.0  4.5

Скользящее среднее вектора

Details

Вычислим трехточечное скользящее среднее вектора-строки. Если в окне меньше трех элементов в конечных точках, возьмем среднее по доступным элементам.

import EngeeDSP.Functions: movmean

A = [4 8 6 -1 -2 -3 -1 3 4 5]
M = movmean(A, [2 1])
1×10 Matrix{Float64}:
 6.0  6.0  4.25  2.75  0.0  -1.75  -0.75  0.75  2.75  4.0

Скользящее среднее матрицы

Details

Вычислим трехточечное центрированное скользящее среднее для каждой строки матрицы. Окно начинается с первой строки, скользит горизонтально до конца строки, затем перемещается ко второй строке и так далее. Аргумент размерности равен двум, что позволяет скользить по столбцам матрицы A.

A = [4 8 6; -1 -2 -3; -1 3 4]
3×3 Matrix{Int64}:
  4   8   6
 -1  -2  -3
 -1   3   4
import EngeeDSP.Functions: movmean

M = movmean(A, 3, 2)
3×3 Matrix{Float64}:
  6.0   6.0   7.0
 -1.5  -2.0  -2.5
  1.0   2.0   3.5

Скользящее среднее вектора с пропущенными значениями

Details

Вычислим трехточечное центрированное скользящее среднее вектора-строки, содержащего два элемента NaN.

import EngeeDSP.Functions: movmean

A = [4 8 NaN -1 -2 -3 NaN 3 4 5]
M = movmean(A, 3)
1×10 Matrix{Float64}:
 6.0  NaN  NaN  NaN  -2.0  NaN  NaN  NaN  4.0  4.5

Пересчитаем среднее значение, но исключим значения NaN. Когда функция movmean игнорирует элементы NaN, она вычисляет среднее значение по оставшимся элементам в окне.

M = movmean(A, 3, "omitnan")
1×10 Matrix{Float64}:
 6.0  6.0  3.5  -1.5  -2.0  -2.5  0.0  3.5  4.0  4.5

Получение только средних значений полного окна

Details

Вычислим трехточечное центрированное скользящее среднее вектора-строки, но отбросим все вычисления, использующие менее трех точек из выходных данных. Другими словами, вернем только средние значения, вычисленные для полного трехэлементного окна, отбросив вычисления в конечных точках.

import EngeeDSP.Functions: movmean

A = [4 8 6 -1 -2 -3 -1 3 4 5]
M = movmean(A, 3, "Endpoints", "discard")
1×8 Matrix{Float64}:
 6.0  4.33333  1.0  -2.0  -2.0  -0.333333  2.0  4.0

Дополнительно

Среднее значение

Details

Для вектора конечной длины, состоящего из скалярных наблюдений, среднее значение определяется как