How to return random unique values based only on the value in each row for the first colomn?

1 visualizzazione (ultimi 30 giorni)
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.

Risposta accettata

Jon
Jon il 13 Apr 2023
Modificato: Jon il 13 Apr 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

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Prodotti


Release

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by