find function on specific row and column of an array.

Hi,
I used find function in order to find row location of an array cell. To illustrate in an example:
A=magic(10)
A =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
find(A(4:5,4)==21)
ans =
1
What I wanted to get is in intersection of a row window and a specific column, I wanted to find a specific input's row location in the matrix. I expected to find the row number as 4, however I get 1. Find function thinks A(4:5,4) is a new array and gives locations accordingly.
Does anyone know how to get the true row location when I specify an mxn sub-matrix in a rxs matrix where r>m, s>n?
Thx,
JD

 Réponse acceptée

Image Analyst
Image Analyst le 30 Oct 2016
Modifié(e) : Image Analyst le 30 Oct 2016
To find a submatrix in another matrix, use ismember:
m = magic(10)
subm = m(4:6, 3:8)
% c = normxcorr2(subm, m)
[ia, ib] = ismember(m, subm)

Plus de réponses (1)

Just don't specify a sub-matrix. Why are you doing that? It just ruins it and doesn't give you what you want. Just do it like this:
A=magic(10)
[rows, columns] = find(A == 21)

4 commentaires

John's "Answer" moved here:
It is due to a matrix like
A=
17 24 1 8 15
23 5 1 14 16
4 6 1 20 22
10 12 1 21 3
11 18 1 2 9
11 13 2 5 1
10 20 2 5 13
18 5 2 5 8
11 14 2 6 19
19 6 2 6 1
25 28 3 28 22
24 25 3 22 23
25 20 3 30 21
28 21 3 6 26
23 27 3 28 27
I want to find row number of
A(9,4)
if I know I should look for it at
A(:,3)==2 and A(:,4)
I've got to use a window of row on a specific column. I thought find() could do it.
I don't know why you're extracting the 3rd and 4th columns. If you want to get row 9 and column 4 and find all elements in A that match the value at (9,4) then just use find exactly as I said:
[rows, columns] = find(A == A(9,4))
rows and columns will be vectors with the row and column where A = 2. So you will find the (9,4) element plus lots of other places where A = 2.
JohnDylon
JohnDylon le 29 Oct 2016
Modifié(e) : JohnDylon le 29 Oct 2016
Before code finds its location, I don't know it is at (9,4) coordinate in the array. I expect the code finds it, I just told it in order to make my problem clear.
Matrix A is like
A=
1 24 1 1 15
2 5 1 2 16
3 6 1 3 22
4 12 1 4 3
5 18 1 5 9
6 13 2 1 1
7 20 2 2 13
8 5 2 2 8
9 14 2 3 19
10 6 2 4 1
11 28 3 1 22
12 25 3 2 23
13 20 3 3 21
14 21 3 4 26
15 27 3 5 27
It has a sub matrix
A1=
6 13 2 1 1
7 20 2 2 13
8 5 2 2 8
9 14 2 3 19
10 6 2 4 1
and I wanted to find row location of A(7,4) however I didn't know it was at the 7th row at first place, I needed that info.
I guess find still can work for this specific problem with
row=find(A(:,3)==2 & A(:,4)==2, 1, 'first')
that generates row=7 and
row=find(A(:,3)==2 & A(:,4)==2, 1, 'last')
that generates row=8.
Thank you for help.
JD
So you want to do basically a template matching. You have a known submatrix and want to find its location inside a larger matrix. You can use normxcorr2() to do that. I attach a demo.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by