1 と 0 のバイナリ ベクトルがあります。数値 1 の範囲/島を関数で見つけたいと思います。たとえば、x = 0001111001111111000110 ... 次のような答えが必要です: 4-7 (または 4 5 6 7)、10-16、20-21 ... お世話になりました!
質問する
252 次
2 に答える
1
Akiのソリューションのバリアント(あまりテストされていません):
x = [0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0];
dx = diff([0, x, 0]);
start_pos = find(dx == 1);
end_pos = find(dx == -1) - 1;
于 2013-09-20T06:10:59.030 に答える
1
元の配列の両端にゼロを追加すると、偶数回の遷移が保証されます (0 から 1 で開始し、1 から 0 で終了します)。その後、基本的にdiff
は出力を微調整することになります。
x = [0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0];
% how to make that out from a string xx="0001111001111111000110" is left
% as an exercise
y = [0 x 0]; % make sure x="11"; has proper amount of transitions
R = 1:length(y)-1; % make an array of indices [1 2 3 4 5 ... end-1]
F = R(y(2:end) != y(1:end-1)); % finds the positions [4,8,10,17,20,22]
start_pos = F(1:2:end-1); % gets 4,10,20
end_pos = F(2:2:end)-1; % gets 7,16,21 adjusted
免責事項: テストされていません。
于 2013-09-20T05:35:36.337 に答える