我试图从Matlab(或Octave)中的数字向量中修剪任何长度为3或更长的序列.例如,给定的矢量数据集,
dataSet = [1 2 3 7 9 11 13 17 18 19 20 22 24 25 26 28 30 31];
Run Code Online (Sandbox Code Playgroud)
删除长度为3或更长的所有序列将产生prunedDataSet:
prunedDataSet = [7 9 11 13 22 28 30 31 ];
Run Code Online (Sandbox Code Playgroud)
我可以强制解决方案,但我怀疑使用向量/矩阵操作有一种更简洁(也许是有效)的方法,但我总是对某些东西产生索引或所述索引的值感到困惑.建议?
这是我提出的蛮力方法:
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));
Run Code Online (Sandbox Code Playgroud)
%# define dataset
dataSet = [1 2 3 7 9 11 13 17 18 19 20 22 24 25 26 28 30 31];
%# take the difference. Whatever is part of a sequence will have difference 1
dds = diff(dataSet);
%# sequences of 3 lead to two consecutive ones. Sequences of 4 are like two sequences of 3
seqIdx = findstr(dds,[1 1]);
%# remove start, start+1, start+2
dataSet(bsxfun(@plus,seqIdx,[0;1;2])) = []
dataSet =
7 9 11 13 22 28 30 31
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |