1

我有一个 1 和 0 的二进制向量。我想用数字 1 的函数范围/孤岛查找。例如:x = 0001111001111111000110 ...我需要这样的答案:4-7(或 4 5 6 7)、10-16、20-21 ... 谢谢你的帮助!

4

2 回答 2

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 回答
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 回答