1. ホーム
  2. matlab

[解決済み] 単純論理条件フラグ MATLAB

2022-02-13 10:07:47

質問

以下のデータ抽出のロジックを開発するのを手伝ってほしい。C1が'1'のとき、C2カラムが'1'にトグルする必要があります。次に、C1が'-1'のとき、C2カラムは'0'にトグルする。C1 のトグル (1 & -1) の間にある C2 のすべての行は '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