Get all row indices where values of to columns reach their maximum
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Georg Bauer
el 3 de Feb. de 2023
Comentada: Les Beckham
el 5 de Feb. de 2023
Hey,
i would like to get an array containing the indices of all rows in which the values of column 2 and 3 reach their maximum at the same time.
Example:
A = [1 2 3;
1 4 3;
2 4 3;
1 4 2];
Output should be an array containing the values 2 and 3 corresponding to row 2 and 3 of array A since the values in column 2 and 3 both reach their maximum at the same time.
Output = [2 3];
Thank You :-)
0 comentarios
Respuesta aceptada
Les Beckham
el 3 de Feb. de 2023
A = [1 2 3;
1 4 3;
2 4 3;
1 4 2];
m = max(A(:,2:end), [], 1)
Output = find(all(ismember(A(:,2:end), m), 2))
4 comentarios
Voss
el 4 de Feb. de 2023
@Georg Bauer: What should Output be when A is as follows?
A = [1 2 3;
1 4 3;
2 3 3;
1 4 2];
% get column-wise maxima:
m = max(A(:,2:end), [], 1);
The given answer will give [2; 3] since rows 2 and 3 both have all values in their 2nd and 3rd columns as elements of the column-wise maxima m ([3 4]):
Output = find(all(ismember(A(:,2:end), m), 2))
But I think you want the result to be row 2 only, since that's the only row where the column-wise maxima occur in the same row, in which case you can use this logic, to compare elements in each column individually:
Output = find(all(A(:,2:end) == repmat(m,size(A,1),1), 2))
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing 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!