用值填充二进制向量中的奇数序列
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;
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
我正在寻找这个问题的矢量化解决方案:
设 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;
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