Find index of specific ordered pair in layered matrix

4 ビュー (過去 30 日間)
Andrew Poissant
Andrew Poissant 2017 年 8 月 7 日
編集済み: Kevin Xia 2017 年 8 月 9 日
I have an ordered pair matrix, A=[x y], and a layered matrix, N, with three layers. What I want to do is search layer 2 for the correct x value and then layer 3 for the corresponding y value. Layer 2 represents the x axis and layer 3 represents the y axis. So in essence, I want to scan layer 2 and highlight the column that contains the x value and then scan the 3rd layer, highlight the row that contains the y value, and return the index at which layer 2 and layer 3 intersect. Any ideas on how to do this? I showed my setup of the layered matrix N and the values in matrix A. Layer 1 of matrix N are just random values and are irrelevant for this problem. Printing out layer 2 and 3 of matrix N would help visualize what I am talking about. Thanks!
cn = 3;
N11 = randi([0,5],cn,cn);
N12 = randi([1,4],cn,cn);
N13 = randi([0,7],cn,cn);
N14 = randi([0,6],cn,cn);
N21 = randi([1,3],cn,cn);
N22 = randi([1,7],cn,cn);
N23 = randi([4,6],cn,cn);
N24 = randi([2,7],cn,cn);
N31 = randi([1,4],cn,cn);
N32 = randi([6,7],cn,cn);
N33 = randi([1,7],cn,cn);
N34 = randi([3,4],cn,cn);
N41 = randi([2,5],cn,cn);
N42 = randi([0,3],cn,cn);
N43 = randi([5,6],cn,cn);
N44 = randi([0,4],cn,cn);
N = [N11 N12 N13 N14;
N21 N22 N23 N24;
N31 N32 N33 N34;
N41 N42 N43 N44];
[x, y] = size(N);
H1 = -x/2:1:x/2;
H2 = H1(find(H1~=0));
V1 = -y/2:1:y/2;
V2 = V1';
V3 = V2(find(V2~=0));
N(:,:,2) = H2(ones(x,1),:);
N(:,:,3) = V3(:,ones(y,1)) % finish making layered matrix, N
A = [-6 -1; -3 4; 2 2; 5 -1];

採用された回答

Kevin Xia
Kevin Xia 2017 年 8 月 7 日
Suppose that you want to find the row and column index where the second layer is -6 (A(1,1)) and where the third layer is -1 (A(1,2)). To go about doing so, use:
[row col]=find(N(:,:,2)==A(1,1) & N(:,:,3)==A(1,2));
This will give you the row and column where the layers intersect. To understand why this is the case, it is necessary to break down the boolean expression into three parts:
1.) N(:,:,2)==A(1,1)
2.) N(:,:,3)==A(1,2)
3.) &
Part 1 generates a logical matrix. If a value of N(:,:,2) is -6, then value of the logical matrix at that index is 1. Otherwise it is 0. The following logical matrix is thus generated:
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
Part 2 also generates a similar logical matrix, only for the condition where N(:,:,3) is -1:
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
In part 3, the elementwise AND operator is used. The reason why the standard AND operator (&&) is not used is because && is used for scalar binary values. The elementwise AND (&) operator takes the corresponding element of both logical matrices and applies the AND operation. Thus, the following logical matrix is generated:
  5 件のコメント
Andrew Poissant
Andrew Poissant 2017 年 8 月 8 日
Why would I not need to iterate over the columns? Does matlab automatically pair up the two numbers in the same row? What would that look like?
Kevin Xia
Kevin Xia 2017 年 8 月 9 日
編集済み: Kevin Xia 2017 年 8 月 9 日
Here's a hint:
[row col]=find(N(:,:,2)==A(1,1) & N(:,:,3)==A(1,2));
The above code works for the first row of A. How would you get the above code to work for the second row of A?

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by