Row/column-wise logical indexing

12 views (last 30 days)
Angshuman Deb
Angshuman Deb on 5 Jun 2019
Commented: Angshuman Deb on 6 Jun 2019
I have a matrix
A=[1 2 3;
4 5 6;
7 8 9];
where each row represents a group of numbers. I have a logical matrix
L = [ 0 0 0 1 1 1 1 1 1;
1 1 1 0 0 0 1 1 1;
1 1 1 1 1 1 0 0 0]
where each column represents the groups of A I want to extract.
For example,
A(L(:,1),:) gives me
[4 5 6;
7 8 9]
A(L(:,4),:) gives me
[1 2 3;
7 8 9]
Is there a way to extract all such pairs of rows of A in one vectorized step instead of looping over the columns of L?

Answers (1)

Akira Agata
Akira Agata on 6 Jun 2019
How about the following solution?
B = arrayfun(@(k) A(L(:,k),:), 1:size(L,2), 'UniformOutput', false);
Then, your can obtain cell array B where B{1} = A(L(:,1),:), B{2} = A(L(:,2),:), ... B{9} = A(L(:,9),:).
  1 Comment
Angshuman Deb
Angshuman Deb on 6 Jun 2019
Thanks for the answer. But I am not sure if using arrayfun is going to speed up the calculations. Because I want to use this for a matrix L with very large size along the 2nd dimension which is why I was thinking of avoiding to loop over it.

Sign in to comment.

Products


Release

R2017a

Community Treasure Hunt

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

Start Hunting!