# Finding a specific pair of points in 2 matrices placed at the same index on both

조회 수: 3(최근 30일)
Ran Kagan 2021년 1월 17일
편집: Ran Kagan 2021년 1월 22일
Hi all,
Say I have the following matrices:
A= [1 2 3 ; 2 3 6]
B= [6 7 7; 4 8 9]
And the user wants to find where are the values (3,8) (3 on the first matrix and 8 on the second matrix) exist at the same index in both.
Is there an efficient built-in function that will return the output of (2,2), which is the location in both matrixes (A and B) that referes to the user's input?
I need to avoid from accidently finding the 3 on (1,3) in A and the 8 on (2,2) in B - even though they meet the same values of the user's input, they are not indexed on the same places in both matrices.
It is only a toy example, the real matrices A and B are huge so running with loops would be very inefficient, hence my question.
In addition, this code should also work and return the same answer if the user's input will be close enough to (3,8), for instance: (2.9,7.9). How can this be implemented?
Thanks!

댓글을 달려면 로그인하십시오.

### 답변(2개)

Matt Gaidica 2021년 1월 17일
[row,col] = find(A == 3 & B == 8)
Those will be empty if your condition doesn't exist.
##### 댓글 수: 4표시숨기기 이전 댓글 수: 3
Image Analyst 2021년 1월 17일
You'd not be "touching" or changing them, just rounding them
[rows, columns] = find(A == round(usersAValue) & B == round(usersBValue));

댓글을 달려면 로그인하십시오.

Image Analyst 2021년 1월 17일
Try this:
A = [1 2 3 ; 2 3 6]
B = [6 7 7; 4 8 9]
usersAValue = 2.9
usersBValue = 7.9
% Specify how close they can be and still be considered a "match".
tolerance = 0.15;
abs(A - usersAValue)
% Get a matrix with 1's wherever the values are within the tolerance.
matchingMap = abs(A - usersAValue) < tolerance & abs(B - usersBValue) < tolerance
% Find all locations where there is a 1 (where values are within tolerance).
[rows, columns] = find(matchingMap)
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Ran Kagan 2021년 1월 22일
"In the latter case, you can change tolerance according to position/location if you want.".
The problem is: I don't know how to map the tolerances of neighboring indices in these huge matrices, as I couldn't figure out what the calculation should be for that, nor whether or not there is a logic in that.
If the difference was constant all along the way, it was perfect. But since this is ain't the case, I'm stuck.
As I demonstrated in the examples, for the case of r=0.25, the smallest difference is ~1.3*10^-4, while for the second case, the smallest difference is ~4.8*10^-5. Setting the tolerance for the second case (which is tigther), and applying it to all of the possible user's input, would be incorrect, as for the case of r=0.25 (and for numerous other cases as well), I won't get an output at all, as the
r_sp-usersValue < tolerance(=~4.8*10^-5)
will yield zero findings.
The fact that this code needs to meet both criteria (provding the closest user's input value & being on the same row and column on both matrices), while being efficient, makes it really hard for me to consdier my next steps. Otherwise it would have been relatively simple.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!

Translated by