Comparing more than two columns of a matrix using '<' or '>' symbol
    12 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    pavikirthi
 el 26 de Oct. de 2015
  
    
    
    
    
    Comentada: pavikirthi
 el 26 de Oct. de 2015
            How to compare more than two columns of a matrix using '<' or '>' symbol?
For example, if I have a matrix A and if I compare the columns using '<' symbol
A=
   2     5     4
   4     1     2
   6     0     1
   7     5     8
I should get the output as
   1   0    0
   0   1    0
   0   1    0
   0   1    0
So, is there any solution that doesn't restrict for any two columns or three columns but in general more than two columns
0 comentarios
Respuesta aceptada
  Guillaume
      
      
 el 26 de Oct. de 2015
        There is only ever one number per row that is smaller than all the other columns, and that is the minimum of the row. Hence, use min:
   A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
   [~, col] = min(A, [], 2);
   B = zeros(size(A));
   B(sub2ind(size(A), 1:size(A, 1), col')) = 1
Más respuestas (3)
  Steven Lord
    
      
 el 26 de Oct. de 2015
        Take a look at the second output of the MIN function.
 A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
 [~, index] = min(A, [], 2)
Then use either a FOR loop or SUB2IND to fill in the appropriate elements in your output matrix.
1 comentario
  Stephen23
      
      
 el 26 de Oct. de 2015
				>> A = [2 5 4; 4 1 2; 6 0 1; 7 5 8];
>> [~,idx] = min(A,[],2);
>> X = false(size(A));
>> X(sub2ind(size(A),1:size(A,1),idx.')) = true
X =
   1   0   0
   0   1   0
   0   1   0
   0   1   0
  Lessmann
      
 el 26 de Oct. de 2015
        Hi,
you can achieve this by using
 B = diff(-A,1,2) < 0
You have to concatenate a column of zeros, so that A and B are of equal size.
1 comentario
  Thorsten
      
      
 el 26 de Oct. de 2015
				That's only valid if you want to restrict your comparison to adjacent columns. In the example, column 1 is not compared to 3.
  Thorsten
      
      
 el 26 de Oct. de 2015
         A = [2     5     4
     4     1     2
     6     0     1
     7     5     8];
 pairs = nchoosek(1:size(A,2), 2)
 X  = cell2mat(arrayfun(@(i)( A(:, pairs(i,1)) < A(:,pairs(i,2))), 1:3, ...
               'UniformOutput', false))
Ver también
Categorías
				Más información sobre Operators and Elementary Operations en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




