How to return random unique values based only on the value in each row for the first colomn?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
To get a sense of what I am trying to do:
A = [1, 15200, 3, 5, 7; 15200, 15200, 15200, 7,0; 1,1,1,1, 15200; 9200, 1, 1,1,1];
[val] = max(A, [], 2);
indices = find(A==val);
[row, col] = ind2sub(size(A), indices);
sub = [row, col];
Now sub is a array as such [ 1,2 ; 2,1 ; 2,2 ; 2,3 ; 3,5; 4,1 ] and I want that only one value with 2 in the first colomn is returned, but randomly and not only the 2,1 but sometimes 2,2 or 2,3. So the output of my code should be an array with either [ 1,2 ; 2,1 ; 3,5; 4,1 ] or [ 1,2 ; 2,2 ; 3,5; 4,1 ] or [ 1,2 ; 2,3 ; 3,5; 4,1 ]. The code should also do this if the value was not 2 so if I had a, array with [ 1,2 ; 3,1 ; 3,2 ; 3,3 ; 3,5; 4,1 ] it would return only one value for 3 in the first column.
The idea is that I select 1 of the maximum values in the rows in the A-array, but not always the first one.
0 comentarios
Respuesta aceptada
Jon
el 13 de Abr. de 2023
Editada: Jon
el 13 de Abr. de 2023
Here's another way, with no loops
% Example data matrix
% I modified this a little from your example to have
% multiple occurences of row maximum in the 5th row also, to give better
% illustration
A = [1, 15200, 3, 5, 7; 15200, 15200, 15200, 7,0; 1,1,1,1, 15200; 9200, 1, 9200,1,1];
% get array dimension for later use
numRows = size(A,1);
% Find the row maximums
rowMax = max(A,[],2);
% Mark locations where row maximums occur
isRowMax = A == rowMax;
% Make matrix with random values wherever row maximums occur and zero
% everywhere else
S = isRowMax.*rand(size(A));
% Select random column amongst occurrences of row maximums
% (column where largest element in S occurs is random)
[~,selectedColumn] = max(S,[],2);
% Return row and column indices for location of maximum in each row
sub = [(1:numRows)' selectedColumn]
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Resizing and Reshaping 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!