How to detect a sequence in an array [extended]
Show older comments
Hello everybody,
let's say, I have this sequence: 1 - 770 - ... (unknow amount of uninteresting numbers shortened with uaun) ... - 897 - uaun - 769 - uaun - 897 - uaun - (continues in any way)
I would like to be able to detect how many times 770 is followed by 897 followed by 769. Additionally, I would like to calculate how many times 769 is followed by 897. 770-uaun-897-uaun-769-uaun-897 counts for both events.
Can someone think of an elegant way to program this? I can only think of an unbelievable complicated program with a lot of while-loops and break-commands.
Thank you in advance!
Marcus
4 Comments
the cyclist
on 17 Jan 2018
Edited: the cyclist
on 17 Jan 2018
As a first step, to reduce the overall computational burden, you can do
x = intersect(x,[770 897 769]);
to remove the irrelevant elements.
What should the two counts be for this vector?
x = [770 897 769 770 897 769 897]
? I'm specifically wondering if the 897-769 after the second 770 also count toward the first 770, which they also follow.
Marcus Schneider
on 17 Jan 2018
Edited: Walter Roberson
on 17 Jan 2018
Guillaume
on 17 Jan 2018
intersect won't work since it removes all duplicates. Filtering with ismember would.
the cyclist
on 17 Jan 2018
Crap. That's the first way I posted it -- then thought I had found some more elegant. Fail.
x = x(ismember(x,[770 897 769]));
Accepted Answer
More Answers (0)
Categories
Find more on Image Category Classification in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!