这与: 在序列中查找零岛有关。
但是,问题并不完全相同:
让我们取与上述帖子相同的向量进行比较:
sig = [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0];
我试图找到的是n个连续零岛的起始索引;但是,不允许重叠。例如对于 n=2,我想要结果:v=[3, 5, 14, 25];
我发现Amro的解决方案非常出色作为起点(尤其是关于 strfind),但他回答的第二部分并没有给我预期的结果。这是我到目前为止的非矢量化解决方案:
function v=findIslands(sig, n)
% Finds indices of unique islands
% sig --> target vector
% n --> This is the length of the island
% This will find the starting indices for all "islands" of ones
% but it marks long strings multiple times
startIndex = strfind(sig, zeros(1,n));
L=length(startIndex);
% ongoing gap counter
spc=0;
if L>0 % Check if empty
v=startIndex(1);
for i=2:L
% Count the distance
spc=spc+(startIndex(i)-startIndex(i-1));
if spc>=n
v=[v,startIndex(i)];
% Reset odometer
spc=0;
end
end
else
v=[];
display('No Islands Found!')
end
我想知道是否有人对上述问题有更快的矢量化解决方案。