1

我有一个向量“a”和一个过滤器“b”。这两个向量都只包含 0 或 1。我想转换“a”,以便任何 1 的序列仅在 b 为 1 时开始。

我已经使用循环来说明这一点,但是由于我的向量很大,因此效率极低。

我想要的结果存储在“r”中。

a=[0;0;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;1];

b=[0;0;0;0;1;0;1;0;0;1;0;1;0;1;1;0;0;0;0];

r=[0;0;0;0;1;1;1;1;0;0;0;1;0;0;1;1;1;1;1];

for i=2:length(a)

    if a(i)==1  &&a(i-1)==0 && b(i)==0        
       a(i)=a(i-1);          
    end
end

assert(sum(a==r)==length(a))
4

1 回答 1

0

这是一个两行:

r = a;
r([false; diff(a)>0 & b(2:end)==0]) = 0;

请注意,您需要调整行向量的代码(这适用于列向量)。

于 2013-04-28T20:19:32.093 回答