gpt4 book ai didi

matlab - 从 Matlab/Octave 中的向量中识别(和删除)序列

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:07 25 4
gpt4 key购买 nike

我正在尝试从 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));

最佳答案

这是一个使用 DIFF 的解决方案和 STRFIND

%# 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

关于matlab - 从 Matlab/Octave 中的向量中识别(和删除)序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com