Как блокировать среднее в цикле for с неоднородной длиной данных - PullRequest
0 голосов
/ 06 февраля 2019

Я новичок в Matlab, и мне нужно оценить среднее значение неоднородной длины данных в векторе.У меня есть матрица со столбцом флага (единицы и нули), отметкой времени и моей переменной, представляющей интерес.В основном, данные (из интрумента) измеряются в флаге: ноль (эталонное значение) для количества времени N, а флаг: один в выборке для количества времени N.N является переменной величиной, но колеблется в пределах 28-30 секунд.

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

То, что я сделал до сих пор:

for i=1:numel(inlet)

if inlet(i)== 1; co2_0(i)=NaN; end

end

for i=1:numel(inlet)

if inlet(i)== 0; co2_1(i)=NaN; end

end

То, что это делает, в основном ставит NaN, когда условие (то есть ноль или единица) не выполняется.

Затем я попытался сделатьвложено в цикл / if, но это та часть, где я не могу оценить средние значения

for i = 1:1:length(inlet)

if inlet (i) == 1
    co2_avg(i) = co2_1 (i);
end


for j=1:length(co2_avg)
    co2_mu (j) = mean(co2_avg);
end

end

Любая помощь приветствуется

1 Ответ

0 голосов
/ 07 февраля 2019
  1. Как сказал Вольф, вы можете просто использовать X(X(:,1)==1, 3) вместо X(:,3) в любом месте, которое хотите усреднить только для тех, у кого 1 в первом столбце, и аналогично для 0.

  2. Если вы хотите рассчитать среднее значение, игнорируя значения NaN, вы должны использовать nanmean вместо среднего.

(обычноговоря, в Matlab есть эквивалентная функция «игнорирования NaN» для большинства простых функций: nanmin, nanmax, nanstd и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...