在MATLAB中为更大的矢量索引

Gab*_*rdi 7 matlab

我试图在较大的一个中找到较小向量的索引位置.

我已经使用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)

谢谢

rah*_*ma1 7

这是使用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)


bar*_*san 4

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)