how to find patterns in an array

1 visualizzazione (ultimi 30 giorni)
Riley
Riley il 3 Ott 2014
Risposto: Riley il 3 Ott 2014
Hello
I have a 19*19 array filled with either a 1, -1 or a 0.
I need to find patterns of 5 repeating values next to each other of any value in both row and columns, and then store where the patterns are in an array.
example:
[1 0 0 0 0 0 1 0 -1 ]
and then store where the patterns are in another 19*19 array. As either a row pattern, column pattern or both.
any suggestions on how to do it? I'm completely lost.

Risposta accettata

Guillaume
Guillaume il 3 Ott 2014
A loop is probably the simplest and clearest way to do it:
A = randi(3, 20) - 2; %for demo
patternlength = 5;
pl = patternlength - 1; %actually more useful than patternlength
positions = zeros(size(A)) %output matrix
for col = 1:size(A, 2) - pl
for row = 1:size(A, 1)- pl
if all(diff(A(row:row+pl, col)) == 0) || all(diff(A(row, col:col+pl)) == 0)
positions(row, col) = 1;
end
end
end

Più risposte (2)

Andrei Bobrov
Andrei Bobrov il 3 Ott 2014
n = 5;
idxv = find(conv2(double(diff(A) == 0),ones(n-1,1),'same') == n-1);
idxv = idxv - 1;
idxh = find(conv2(double(diff(A,1,2) == 0),ones(1,n-1),'same') == n-1);
idxh = idxh - size(A,1);

Riley
Riley il 3 Ott 2014
Thankyou very much Guillaume, that worked perfectly. Very much appreciated.
Andrei thank you for your time as well.

Categorie

Scopri di più su Multidimensional Arrays in Help Center e File Exchange

Tag

Non è stata ancora inserito alcun tag.

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by