简单逻辑条件标志MATLAB



我需要帮助来开发以下数据提取的一些逻辑。当C1为"1"时,我需要C2列切换到"1"。然后,当C1为"-1"时,C2列切换到"0"。C2中C1切换(1&-1(之间的所有行都需要转到"1"。

Date           C1  C2
'24-Dec-1999'   0   0
'31-Dec-1999'   1   1
'07-Jan-2000'   0   1
'14-Jan-2000'   0   1
'21-Jan-2000'   0   1
'28-Jan-2000'   0   1
'04-Feb-2000'   -1  0
'11-Feb-2000'   0   0
'18-Feb-2000'   0   0
'25-Feb-2000'   0   0

我使用了以下内容,但它只更改了1999年12月31日和2000年2月4日的第一个和最后一个条目。如何使C2中介于(2000年1月7日至2000年1日28日(之间的条目也列为"1"?

C2(C1==1)=1;
C2(C1==-1)=0;

更新

最简单的方法是计算累积总和

C2 = cumsum(C1);

原始/替代

你可以找到C1=1C1=-1的索引,根据你的评论,这些的数量应该相等

idxStart = find(C1=1); % Could use >0.5 to avoid numerical precision issues
idxEnd = find(C1=-1);  % Could use <-0.5 to avoid numerical precision issues

然后你只需要循环通过它们,并使C2=1在之间

C2 = zeros(size(C1));
for ii = 1:numel(idxStart)
C2(idxStart(ii):idxEnd(ii)-1) = 1;
end

最新更新