I am trying to trim any sequence of 3 or more of a vector of numbers in Matlab (or Octave). For example, given a vector dataset,
dataSet = [1 2 3 7 9 11 13 17 18 19 20 22 24 25 26 28 30 31];
deleting all sequences of 3 or more will result in a reduction in the DataSet:
prunedDataSet = [7 9 11 13 22 28 30 31 ];
I can redirect the solution, but I suspect there is a more concise (and possibly efficient) way to do this using vector / matrix operations, but I am always embarrassed about something giving an index or value at a given index, Suggestions?
Here's the brute force method I came up with:
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));
source share