How to return random unique values based only on the value in each row for the first colomn?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Jon
le 13 Avr 2023
Modifié(e) : Jon
le 13 Avr 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!