How do I shrink a matrix using an array mask in MATLAB?
        Posted  
        
            by Pyrolistical
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Pyrolistical
        
        
        
        Published on 2010-04-29T17:53:23Z
        Indexed on 
            2010/04/29
            18:27 UTC
        
        
        Read the original article
        Hit count: 791
        
This seems to be a very common problem of mine:
data = [1 2 3; 4 5 6];
mask = [true false true];
mask = repmat(mask, 2, 1);
data(mask) ==> [1; 4; 3; 6]
What I wanted was [1 3; 4 6].
Yes I can just reshape it to the right size, but that seems the wrong way to do it.  Is there a better way?  Why doesn't data(mask) return a matrix when it is actually rectangular?  I understand in the general case it may not be, but in my case since my original mask is an array it always will be.
Corollary
Thanks for the answer, I just also wanted to point out this also works with anything that returns a numeric index like ismember, sort, or unique.
I used to take the second return value from sort and apply it to every column manually when you can use this notion to do it one shot.
© Stack Overflow or respective owner