これは、以下に関連し ています。シーケンス内のゼロの島の検索。
ただし、問題はまったく同じではありません。
比較のために、上記の投稿と同じベクトルを使用してみましょう。
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に関して)出発点として素晴らしいと思いましたが、彼の答えの2番目の部分では、私が期待する結果が得られません。これは私がこれまでに持っているベクトル化されていないソリューションです:
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
私は誰かが上記の問題に対してより速いベクトル化された解決策を持っているかどうか疑問に思いました。