查找数字序列的索引

时间:2016-09-20 08:43:55

标签: matlab

我有不同的矩阵看起来像这样matrixExample = [NaN, NaN, 50, 50, 50, 70, 70, 40, 40, 90, 90, 20, 20, 20]

是否有可能获得该矩阵中数字序列的索引?我知道矩阵包含70, 70, 40, 40, 90, 90,它是一个序列。现在我想设置它,如果矩阵包含一个 70, 40, 90 的序列(我自己设置的东西)我想得到这个序列开始(70)和结束(90)的索引)。数字必须以设定的数字顺序排列,但数字的数量可能不同,70, 40, 40, 40, 40, 40, 90, 90, 90也会计算(等等)。

最后一个例子:matrixExample = [NaN, NaN, 50, 70, 50, 80, 70, 60, 70, 70, 40, 40, 90, 90, 20, 20, 20]

找到序列70, 40, 90的位置,并给出开始和结束索引,其中70是开始,90是结束。

非常感谢帮助!!

1 个答案:

答案 0 :(得分:4)

这是一种矢量化方法 -

search_seq = [70,40,90];
idx = [1 find(diff(matrixExample)~=0)+1 numel(matrixExample)+1];
idx0 = strfind(matrixExample(idx(1:end-1)),search_seq)
start_idx = idx(idx0)
idx1 = idx0+numel(search_seq);
stop_idx = idx(idx1)-1

示例运行

案例#1:

>> matrixExample = [NaN, NaN, 50, 50, 50, 70, 70, 40, 40, 90, 90, 20, 20, 20];
start_idx =
     6
stop_idx =
    11

案例#2:

>> matrixExample = [NaN, NaN, 50, 70, 50, 80, 70, 60, ...
    70, 70, 40, 40, 90, 90, 20, 20, 20];
start_idx =
     9
stop_idx =
    14