findout the second largest element in each row and its location in a matrix
    17 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I have a (3*5) matrix i.e A=[1 2 3 4 5, 6 7 9 8 10, 11 12 14 13 15], i would like to find out the second largest element in each row and its location in the matrix. i expect 2 outputs 1)second_maxvalue_A=[4,9,14] 2)location_of_second_maxval=[4,3,3]
0 Commenti
Risposta accettata
  Guillaume
      
      
 il 20 Mag 2015
        One possible way is to find the largest values, replace them with a very small value (-Inf) and search for the new largest values:
A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15] %your example A was a single row
m = max(A, [], 2); %find the max in each row
A(bsxfun(@eq, A, m)) = -Inf; %replace the max(s) by -Inf
m = max(A, [], 2)  %find the new max which is the second largest.
3 Commenti
  Bruno Luong
      
      
 il 28 Ott 2018
				zahra najja: Please read the other ANSWERS bellow, or even better the DOC of MIN
Più risposte (3)
  Thomas Koelen
      
      
 il 20 Mag 2015
        
      Modificato: Thomas Koelen
      
      
 il 20 Mag 2015
  
      Edit: seems like I misread second largest...
, should be ;.
A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15];
[m,i] = max(A,[],2)
gives you:
m =
     5
    10
    15
i =
     5
     5
     5
example:
A=rand(3,5);
[m,i] = max(A,[],2)
gives:
    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003
m =
    0.9649
    0.9058
    0.9706
i =
     4
     1
     4
3 Commenti
  Guillaume
      
      
 il 20 Mag 2015
				Doesn't this find the second largest element in the matrix, rather than each row?
Secondly, if there are more than one element equal to the max, it still returns the max.
  Guillaume
      
      
 il 20 Mag 2015
				A generic way of finding the nth largest value of each row, if it exists:
function nl = nthlargestrow(m, n)
   %m:  a 2d matrix to search
   %n:  an integer
   %nl: cell array containing the nth largest value of each row. If a row does not have n different values, the cell is empty
   nl = cell(size(m, 1), 1);
   u = cellfun(@unique, num2cell(m, 2), 'UniformOutput', false);
   hasnelements = cellfun(@numel, u) >= n;
   nl(hasnelements) = cellfun(@(row) row(end-n+1), u(hasnelements), 'UniformOutput', false)
end
  Thorsten
      
      
 il 20 Mag 2015
        A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15];
% remove highest value in each row
sz = size(A);
[~, ind] = max(A, [], 2);
ind = ind + [0; cumsum(repmat(sz(2), [sz(1)-1 1]))];
A = A';
A(ind) = [];
A = reshape(A, [sz(2)-1 sz(1)])';
% find highest value in each row (i.e., second largest of original matrix)
[max2, ind2] = max(A, [], 2);
0 Commenti
Vedere anche
Categorie
				Scopri di più su Matrices and Arrays in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





