在Matlab / Octave中从向量中识别(并删除)序列
||
我正在尝试从Matlab(或Octave)中的数字向量中修剪长度为3或更大的任何序列。例如,给定向量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));
没有找到相关结果
已邀请:
2 个回复
畦桨存灯
嘘崇蔡对
这个想法是:对于在数字7之前出现数字6的所有位置,数字5都是正确的。对于所有位置,当“ 6”出现在“ 10”之前两个位置时,“ 8”为真。当前面两个条件都满足时,ѭ11变为真。然后,我们构建ѭ11,以便将每个真实值传播给它的两个后继。 最后,
保留所有上述条件为假的值,即,保留不属于3序列的数字。