Я пытаюсь удалить любую последовательность длиной 3 или более из вектора чисел в Matlab (или Octave). Например, с учетом вектора dataSet ,
dataSet = [1 2 3 7 9 11 13 17 18 19 20 22 24 25 26 28 30 31];
удаление всех последовательностей длиной 3 или более приведет к prunedDataSet:
prunedDataSet = [7 9 11 13 22 28 30 31 ];
Я могу использовать грубое решение, но я подозреваю, что есть более лаконичный (и, возможно, эффективный) способ сделать это с помощью векторных / матричных операций, но меня всегда смущает вопрос, дает ли что-то индекс или значение в указанном индексе. , Предложения?
Вот метод грубой силы, который я придумал:
dataSet = [1 2 3 7 9 11 13 17 18 19 20 22 24 25 26 28 30 31];
benign = [];
for i = 1:size(dataSet,2)-2;
if (dataSet(i) == (dataSet(i+1)-1) && dataSet(i) == dataSet(i+2)-2);
benign = [benign i ] ;
end;
end;
remove = [];
for i = 1:size(benign,2);
remove = [remove benign(i) benign(i)+1 benign(i)+2 ];
end;
remove = unique(remove);
prunedDataSet = setdiff(dataSet, dataSet(remove));