how to find patterns in an array

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.

1 件のコメント

per isakson
per isakson 2014 年 10 月 3 日
編集済み: per isakson 2014 年 10 月 3 日
Search the FEX for run length encoding.

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

 採用された回答

Guillaume
Guillaume 2014 年 10 月 3 日

0 投票

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

その他の回答 (2 件)

Andrei Bobrov
Andrei Bobrov 2014 年 10 月 3 日

0 投票

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 2014 年 10 月 3 日

0 投票

Thankyou very much Guillaume, that worked perfectly. Very much appreciated.
Andrei thank you for your time as well.

カテゴリ

ヘルプ センター および File ExchangeMultidimensional Arrays についてさらに検索

製品

タグ

タグが未入力です。

質問済み:

2014 年 10 月 3 日

回答済み:

2014 年 10 月 3 日

Community Treasure Hunt

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

Start Hunting!

Translated by