finding the mean and max
    2 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    johnson saldanha
 el 21 de Nov. de 2018
  
    
    
    
    
    Editada: Andrei Bobrov
      
      
 el 21 de Nov. de 2018
            suppose i have a matrix where the first column is x(:,1)=[ 1 1 1 2 2 1 1 3 1 ] and second column is x(:,2)=[ 2 3 2 4 6 9 7 8 9];
i want the output as y(:,1)=[ 1 2 3 ],  y(:,2)=[ 9 6 8] and y(:,3)=[5.33  5  8];
the first column should be the values from first column of x reduced to a single value and in ascending order, the second column should be the highest number from the second column of x for a particular value in first input column. for ex. for all the 1's in first column of x should return one max value from the second column of x. the third column should contain the means of the second column of x for a particular value in first column of x. same example as given. 
0 comentarios
Respuesta aceptada
  Rik
      
      
 el 21 de Nov. de 2018
        
      Editada: Rik
      
      
 el 21 de Nov. de 2018
  
      The first column you can achieve with unique, the second and third can be done with accumarray.
x=[ 1 1 1 2 2 1 1 3 1 ; 2 3 2 4 6 9 7 8 9]';
[col1,~,ind]=unique(x(:,1));
col2=accumarray(ind,x(:,2),[],@max);
col3=accumarray(ind,x(:,2),[],@mean);
y=[col1 col2 col3]
3 comentarios
  Walter Roberson
      
      
 el 21 de Nov. de 2018
				the third output of unique gives you information about the original order . 
  Rik
      
      
 el 21 de Nov. de 2018
				This code produces the output like you describe. As Walter mentions (and as you can read in the doc of unique) the third output of the unique function returns the order so isequal(col1(ind),x(:,1)) returns true (barring any float rounding errors).
This means that this input will also work as intended:
x=[5 1 1 1 2 2 1 1 3 1 5;9 2 3 2 4 6 9 7 8 9 1]';
Más respuestas (1)
  Andrei Bobrov
      
      
 el 21 de Nov. de 2018
        
      Editada: Andrei Bobrov
      
      
 el 21 de Nov. de 2018
  
      EDITED
>> XXX =[ 1 1 1 2 2 1 1 3 1 ; 2 3 2 4 6 9 7 8 9]'
XXX =
     1     2
     1     3
     1     2
     2     4
     2     6
     1     9
     1     7
     3     8
     1     9
>> T = varfun(@(x)[max(x),mean(x)],array2table(XXX),'G',1);
out = T{:,[1,3]}
out =
            1            9       5.3333
            2            6            5
            3            8            8
>> 
2 comentarios
  Andrei Bobrov
      
      
 el 21 de Nov. de 2018
				
      Editada: Andrei Bobrov
      
      
 el 21 de Nov. de 2018
  
			I edited my answer, and you read the help about the MATLAB functions.
Ver también
Categorías
				Más información sobre Creating and Concatenating Matrices 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!