用值填充二进制向量中的奇数序列

Fill odd sequences between ones in binary vector with value

我正在寻找这个问题的矢量化解决方案: 设 A 一个 0 和 1 的向量(大尺寸:> 10000)。

例如:

A = [0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 etc]

我想用 2 替换 1 之间的 0(奇数位) 即产生:

B = [0 0 0 1 2 2 2 2 2 1 0 0 0 1 2 2 1 0 0 1 2 1 etc]

感谢您的帮助

尝试使用 cumsum

cs = cumsum( A );
B = 2*( mod(cs,2)== 1 );
B(A==1) = 1;

使用 cumsum and mod 可以很容易地完成:

A = [0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1]

简答

A( mod(cumsum(A),2) & ~A ) = 2

A =   
     0   0   0   1   2   2   2   2   2   1   0   0   0   1   2   2   1   0   0   1   2   1

您要求填满 奇数 的岛屿,但通过将 mod(... 更改为 ~mod(... 您也可以轻松填满 [=27] 的岛屿=]偶数排名.

Explanation/Old 答案:

mask1 = logical(A);
mask2 = logical(mod(cumsum(A),2))

out = zeros(size(A));
out(mask2) = 2
out(mask1) = 1