# Using a binary matrix as an index to select values from another matrix

24 views (last 30 days)
Shuyi Jia on 14 Jun 2019
Edited: Shuyi Jia on 14 Jun 2019
Hi all,
I think this is a really beginner question, but I can't seem to find the relevant answers online.
If I have the following matrix:
% 3x2
index_matrix = [0,0;1,0;1,1;]
% 3x2
p = [13,12;11,19;22,23;]
I wish to select the corresponding value in p if the value at the same position in index_matrix = 1.
If the value in index_matrix is 0, then the corresponding value should be set to 0.
That is, I wish to have the following:
result = [0,0;11,0;22,23;]

Kai Franke on 14 Jun 2019
result = p.*index_matrix
matrix multiplication is the keyword hehe
Best regards.

Stephen Cobeldick on 14 Jun 2019
"matrix multiplication is the keyword hehe"
Actually the keyword is element-wise multiplication (that is what you used in your answer).
Matrix multiplcation is something quite different, as the MATLAB documentation explains:
Shuyi Jia on 14 Jun 2019
Thanks! That works!
Just a follow-up question, what if my index_matrix is like this:
index_matrix = [1,0;3.5,1;0,6;]
p = [13,12;11,19;22,23;]
And I still wish to obtain the corresponding values in p, only if the values at the same positions in index_matrix == 1 (not 3.5 or 6; 0 for all other values)?
That is:
result = [13,0;0,19;0,0;]
Kai Franke on 14 Jun 2019
@Stephen Cobeldick
oh yeah you are absolutely right! Element-wise multiplication. My answer was very sloppy, my bad. Thanks for the correction!

Stephen Cobeldick on 14 Jun 2019
>> X = [1,0;3.5,1;0,6];
>> p = [13,12;11,19;22,23];
>> p.*(X==1)
ans =
13 0
0 19
0 0

#### 1 Comment

Shuyi Jia on 14 Jun 2019
Thank you! I didn't know one can manipulate matrix like this. New to matlab!