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

предположим, у меня есть следующая матрица

a =

76 NaN 122 NaN

78 NaN 123 NaN

84 NaN 124 54

77 NaN 126 58

82 45 129 62

90 50 135 45

76 63 133 66

79 52 122 49

88 56 140 24

Есть ли способ рассчитать экспоненциальную скользящую среднюю для каждого столбца без учета первых значений NaN? Например, если я использую экспоненциальный коэффициент за 3 дня, я ожидаю получить матрицу, начинающуюся с 2 значений NaN в 1-м столбце, 6 значений NaN во 2-м столбце, 2 значений NaN в 3-м столбце и 4 значений NaN в столбце 4-й столбец. Любое предложение? заранее спасибо


person mario    schedule 30.05.2012    source источник


Ответы (1)


Просто используйте фильтр для всей матрицы, который будет проходить через NaN по мере необходимости. Если вы хотите "заразить" значения краев также NaN, добавьте немного дополнительных элементов на верхний край, а затем обрежьте результат:

kernel = [1 1 1].';   % Any 3-element kernel, as column vector
a2 = [repmat(NaN, 2, 4); a];  % Add extra NaN's at the start, to avoid partial answers
xtemp = filter(kernel, 1, a2);
x = xtemp(3:end, :);
person Peter    schedule 30.05.2012
comment
спасибо !, я следую вашему ответу, я получаю Nans там, где я хочу, но итоговая матрица возвращает суммы значений a. Есть ли способ вместо этого рассчитать экспоненциальную скользящую среднюю? - person mario; 30.05.2012
comment
Я просто использовал образец ядра фильтра значений [1 1 1], который складывает значения. Я предполагаю, что вы замените это ядро ​​любым ядром с трехэлементным фильтром, которое вам нужно. Я не уверен, как вы определяете экспоненциальную скользящую среднюю, поэтому я не писал для вас ядро. - person Peter; 30.05.2012