Asked by Georgios Tertikas
on 15 Apr 2019

Hello,

I have a matrix A 151x1 double and a matrix B 151x1000 double. Each value of A corresponds to a certain value in the same row of B. For example if A=22;14;53;2, then B will have the value 22 in one of its columns in the first row, the value 14 in one of its columns in the second row etc. Is there a way to have the matrix of the index of all the columns in B that contain the values of A (always in their coresponding row?).

Answer by madhan ravi
on 15 Apr 2019

Accepted Answer

Indices = cell(numel(A),1);

for k = 1:numel(A)

Indices{k} = find(B(k,:)==A(k));

end

%celldisp(Indices)

% Indices{1} represents first element of A match in first row of B likewise others

madhan ravi
on 15 Apr 2019

Partially correct but try with this and see why it fails :

B= [ 31 23 1 1 9;...

% ^ ^---- see what happens if there is more than one common ground

221 31 51 5 11;...

15 22 33 44 55;...

20 21 22 23 24]

Jon
on 15 Apr 2019

Sign in to comment.

Answer by Adam Danz
on 15 Apr 2019

If I understood you correctly, you have a matrix "B" and a column vector "A" and you want the identify the columns of B that are identical to A (if any). Here's a demo that achieves that:

% Create data

A = randi(100, 151,1);

B = randi(100, 151, 1000);

B(:,55) = A; %column #55 of B equals A

B(:,66) = A; %column #66 of B also equals A

% Identify columns of B that match A

% matchIdx is a logical row vectors containing 'true' for columns of B that match A

matchIdx = ismember(B.', A.', 'rows').';

% Find the column numbers

colNums = find(matchIdx);

colNums =

55 66

Georgios Tertikas
on 15 Apr 2019

Adam Danz
on 15 Apr 2019

Sign in to comment.

Answer by Jon
on 15 Apr 2019

This should work assuming you have exactly one match in each row. If some rows have no matches or more than one match you will have to do something more elaborate

% find the row and column indices of all the places in B that match A

[row,col] = find(A==B)

% sort the matching column locations by row to get them in the desired (row) order

idx = col(row)

Georgios Tertikas
on 15 Apr 2019

The two different matrices have different sizes so I cant use find(A==B)

Jon
on 15 Apr 2019

Actually, it is ok the == operation apparently operates column wise in this situation and then find with two left hand arguments works perfectly for this situation. Please try it to see.

For more info on A==B with A a column with the same number of rows as B please see https://www.mathworks.com/help/matlab/matlab_prog/compatible-array-sizes-for-basic-operations.html

Adam Danz
on 15 Apr 2019

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## madhan ravi (view profile)

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/456527-find-index-of-a-matrix-of-values-into-another-matrix#comment_694365

## Georgios Tertikas (view profile)

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/456527-find-index-of-a-matrix-of-values-into-another-matrix#comment_694377

## madhan ravi (view profile)

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/456527-find-index-of-a-matrix-of-values-into-another-matrix#comment_694379

Sign in to comment.