campare a row value with the next row

4 ビュー (過去 30 日間)
Boby S
Boby S 2020 年 2 月 20 日
コメント済み: Boby S 2020 年 2 月 21 日
Hi
I have the following column:
1
1
0
0
0
1
0
1
0
1
I want to campare rows value one by one with the next row ( first with second, second with third ... and ninth with tenth) and check if it changes for 1 to 0, 0 to 0, 0 to 1 and 1 to 1. For each of these conditions, I want to count them. I tried using loop and diff or sign and equations but I could not work out because the results will be similar for two conditions.

採用された回答

Rik
Rik 2020 年 2 月 20 日
You were close when using diff. You need to think what characterizes all four combinations. The code below should be what you need.
v=[1;1;0;0;0;1;0;1;0;1];
d=diff(v);
u=v(1:(end-1));%shrink by 1 to make it the same size as d
clc
%if [0;0]
%then diff==0, v==0
L= d==0 & u==0;
fprintf('[0 0]: %d\n',sum(L))
%if [0;1]
%then diff==-1
L= d==-1;
fprintf('[0 1]: %d\n',sum(L))
%if [1;0]
%then diff==1
L= d==1;
fprintf('[1 0]: %d\n',sum(L))
%if [1;1]
%then diff==0, v==1
L= d==0 & u==1;
fprintf('[1 1]: %d\n',sum(L))
  1 件のコメント
Boby S
Boby S 2020 年 2 月 20 日
Thanks

サインインしてコメントする。

その他の回答 (1 件)

Alex Mcaulley
Alex Mcaulley 2020 年 2 月 20 日
編集済み: Alex Mcaulley 2020 年 2 月 20 日
Another option:
a = [1;1;0;0;0;1;0;1;0;1];
b = diff(a);
b(~b) = 2*a(~b);
sol = splitapply(@numel,b,b+2) %Ordered as [1,0],[0,0],[0,1],[1,1]
sol =
3 2 3 1
  4 件のコメント
Alex Mcaulley
Alex Mcaulley 2020 年 2 月 21 日
With your second column it should work fine, because you have all the possible combinations.
Boby S
Boby S 2020 年 2 月 21 日
I think this is the reason:
I think if one condition result is 0 then I will get the error.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by