Предположит, что у вас есть последовательность значений X/Y, где есть «разрыв» ...Заменить отсутствующие значения от Gap в последовательности
resolution = 0.1;
x = [0:resolution:10 10.5:resolution:20]; % 4 missing values (10.1, 10.2, 10.3, 10.4)
y = ones(1, length(x));
Как вы можете определить «разрыв» в последовательности и заменить он с некоторым типом значения (например, замените его на 0)?
Я думаю, что это работает, но мне интересно, есть ли лучший способ. Кроме того, этот метод будет работать только для 1 разрыва (а не для нескольких промежутков). Я надеюсь на более простой метод ... может быть, даже метод без цикла.
xDiff = diff(x);
calcResolution = min(xDiff); % Try to calculate original resolution
newY = y;
newX = x;
thresh = 0.000001;
for i=1:length(xDiff)
% Check any time the difference is larger than our resolution...
if (abs(xDiff(i) - calcResolution) > thresh)
gapSize = (xDiff(i)/calcResolution) - 1;
newY = [y(1:i) zeros(1, gapSize) y(i:end)];
newX = [x(1:i) (x(i) + calcResolution):calcResolution:x(i+1) x((i+1):end)];
end
end
% newX == 0:resolution:20
% newY == [1 1 1 1 1 1 1 ... 0 0 0 0 ... 1 1 1 1 1 1 1]
Когда есть пробел, как вы определяете, сколько значений отсутствует? Каким должен быть шаг? –
@ LuisMendo Хороший вопрос. Мне нужно было бы рассчитать шаг. Я использовал наименьшее значение в diff(), но мне также нравится идея использования 'mode()' из приведенного ниже ответа. – user807566