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)
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.

Réponse acceptée

Jon
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]
sub = 4×2
1 2 2 2 3 5 4 1

Plus de réponses (0)

Catégories

En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by