我有不同的矩阵看起来像这样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是结束。
非常感谢帮助!!
答案 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