Use logical values to extract a matrix not a vector?
    13 views (last 30 days)
  
       Show older comments
    
Hi all,
I have a matrix like this:
M =
           6     2     9
           7     2     3
           9     3    10
          10     9     4
           6     3     2
and a logical array like this:
logi =
    5×3 logical array
     1   1   0
     1   1   0
     1   1   0
     0   0   0
     0   0   0
If I extract associated values from M using logi:
K>> ext = M(logi)
ext =
       6
       7
       9
       2
       2
       3
but what I want is actually
K>> ext
ext =
       6     2
       7     2
       9     3
So is there a way to extract the values into a matrix using logical operators? Using reshape or whatever to reshape the vector into matrix is forbidden in my case.
4 Comments
  Dennis
      
 on 18 Jun 2018
				If your 2 matrices have the same size in the first place:
ext=M.*logi
Answers (3)
  Guillaume
      
      
 on 18 Jun 2018
        This is going to break in all sort of interesting ways if your logical array wouldn't result in a square matrix. Detecting such situations is left as an exercise to the reader...
[r, c] = find(logi);
ext = M(unique(r), unique(c))
0 Comments
  Star Strider
      
      
 on 18 Jun 2018
        This will work for this particular problem and perhaps for similar situations. It will not work generically:
A = M.*logi;
C = num2cell(A);
I = cellfun(@eq, C, num2cell(zeros(size(C))));
C(I) = {[]};
ext = cell2mat(C)
ext =
     6     2
     7     2
     9     3
0 Comments
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


