我试图在较大的一个中找到较小向量的索引位置.
我已经使用strfind
和解决了这个问题bind2dec
,但是我不想使用strfind
,我根本不想转换为字符串或deciamls.
鉴于矢量较长
a=[1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1];
Run Code Online (Sandbox Code Playgroud)
我想在a里找到较小的向量 b 的索引
b=[1,1,1,0,0,0];
Run Code Online (Sandbox Code Playgroud)
我希望找到结果:
result=[15,16,17,18,19,20];
Run Code Online (Sandbox Code Playgroud)
谢谢
这是使用1D卷积的解决方案.它可能会找到多个匹配,因此start
保存子向量的起始索引:
f = flip(b);
idx = conv(a,f,'same')==sum(b) & conv(~a,~f,'same')==sum(~b);
start = find(idx)-ceil(length(b)/2)+1;
result = start(1):start(1)+length(b)-1;
Run Code Online (Sandbox Code Playgroud)
带for
循环的解决方案:
a=[1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1];
b=[1,1,1,0,0,0];
c = [];
b_len = length(b)
maxind0 = length(a) - b_len + 1 %no need to search higher indexes
for i=1:maxind0
found = 0;
for j=1:b_len
if a(i+j-1) == b(j)
found = found + 1;
else
break;
end
end
if found == b_len % if sequence is found fill c with indexes
for j=1:b_len
c(j)= i+j-1;
end
break
end
end
c %display c
Run Code Online (Sandbox Code Playgroud)