How to detect a sequence in an array [extended]

41 vues (au cours des 30 derniers jours)
Marcus Schneider
Marcus Schneider le 17 Jan 2018
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 commentaires
Guillaume
Guillaume le 17 Jan 2018
intersect won't work since it removes all duplicates. Filtering with ismember would.
the cyclist
the cyclist le 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]));

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 17 Jan 2018
v = [1 770 2 3 4 5 6 897 7 8 769 9 10 11 897 12 13 14 770 15 770 897 769] %demo data
filteredv = v(ismember(v, [770 769 897])); %get rid of uaun
seq1count = numel(strfind(filteredv, [770 897 769])) %despite its name strfind works with sequence of numbers
seq2count = numel(strfind(filteredv, [769 897]))
  5 commentaires
Guillaume
Guillaume le 17 Jan 2018
Oh yes, of course!
v = [1 770 2 3 4 5 6 897 7 8 769 9 10 11 897 12 13 14 770 15 770 897 769] %demo data
filter = ismember(v, [770 769 897]);
filteredv = v(filter);
origlocs = find(filter);
locendfiltered = strfind(filteredv, [770 897 769]) + 2;
locendv = origlocs(locendfiltered)
seqcount = numel(locendv)
Marcus Schneider
Marcus Schneider le 17 Jan 2018
Perfect!!! Thank you!!! Fun fact: your solution is around 50 lines shorter than mine... ;-D

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by