我正在为这个问题寻找一个矢量化解决方案:
让A
向量(大尺寸:> 10000)为0和1。
前:
A = [0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 etc]
我想将1(奇数级别)之间的0替换为2 即生产:
B = [0 0 0 1 2 2 2 2 2 1 0 0 0 1 2 2 1 0 0 1 2 1 etc]
感谢您的帮助
答案 0 :(得分:3)
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(...
,您可以轻松填充甚至等级的岛屿>
解释/旧答案:
mask1 = logical(A);
mask2 = logical(mod(cumsum(A),2))
out = zeros(size(A));
out(mask2) = 2
out(mask1) = 1
答案 1 :(得分:2)
尝试使用cumsum
cs = cumsum( A );
B = 2*( mod(cs,2)== 1 );
B(A==1) = 1;