Row/column-wise logical indexing

10 Ansichten (letzte 30 Tage)
Angshuman Deb
Angshuman Deb am 5 Jun. 2019
Kommentiert: Angshuman Deb am 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?

Antworten (1)

Akira Agata
Akira Agata am 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 Kommentar
Angshuman Deb
Angshuman Deb am 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by