Detect change between two values in an array

Is there any function in Matlab that allows you to read through a column in an array and see if a previous value is the same as a current value? I know there is the "detect change" function block in Simulink and was looking to do something similar with code, however.

 採用された回答

Sean de Wolski
Sean de Wolski 2013 年 10 月 1 日
編集済み: Sean de Wolski 2013 年 10 月 1 日

0 投票

x = [1 1 2 3 4 4 5 6 6 6 6 7];
diff(x)==0 %?

4 件のコメント

Muneer
Muneer 2013 年 10 月 1 日
That method actually finds the difference between the numbers. I don't want to subtract them, just register a change. For example if my data stream is [ 0 0 4 5 7 3 3 87 2 5 1 1], then something that registers a difference would compare the second value to the first, the third to the second, etc and for every change it would record a 1 in a new array or a 0 for no change. so the stream above would become [0 1 1 1 1 0 1 1 1 1 0]. This is what the detect change block does. I just want to do the same thing with code.
Thanks
Sean de Wolski
Sean de Wolski 2013 年 10 月 1 日
Then what I have above is exactly what you want, it's just the opposite, where I kept differences you want to mark them.
x = [ 0 0 4 5 7 3 3 87 2 5 1 1]
logical(diff(x))
Muneer
Muneer 2013 年 10 月 3 日
Thanks for your help, that did the trick
Brandon Leonard
Brandon Leonard 2018 年 4 月 16 日
編集済み: Brandon Leonard 2018 年 4 月 16 日
Sean de Wolski would this same approach work for two values from data collected (e.g. day = 1; night = 2) to locate where this change occurs in continuous data if data was stored in a timeseries? Could it be logged as a event(e.g. tsdata.event.EventData = logical(diff(x)) somehow?

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

その他の回答 (1 件)

Image Analyst
Image Analyst 2013 年 10 月 1 日

1 投票

Try this:
x=[ 0 0 4 5 7 3 3 87 2 5 1 1]
changedIndexes = diff(x)~=0

6 件のコメント

Muneer
Muneer 2013 年 10 月 3 日
Thanks
Gervasio Batista
Gervasio Batista 2017 年 12 月 1 日
Could you extend this to an cell array, please? Thank you!
Brandon Leonard
Brandon Leonard 2018 年 4 月 30 日
Could you extend this to an cell array, please? Thank you!
Image Analyst
Image Analyst 2018 年 5 月 1 日
Use cell2mat() on your cell array first.
Nikolaos Vasilas
Nikolaos Vasilas 2018 年 8 月 25 日
what if the table has nan values?
Image Analyst
Image Analyst 2018 年 8 月 25 日
Table variables can be nan, just like double variables. Actually a column of a table has to be a predetermined type, like double, char, int32, or whatever. So if a column is double, then it's allowable for a row in that double column to have a value of "nan".

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

カテゴリ

Community Treasure Hunt

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

Start Hunting!

Translated by