Are there any functions to randomly pick the minimum element from a vector if the vector has multiple minimum elements?

3 views (last 30 days)
Function min() picks the first minimum element from a vector if the vector has multiple minimum elements.
I want to randomly pick the minimum element from all the minimum elements and get its value and index.
Could you tell me if there is a function to do that?

Accepted Answer

Walter Roberson
Walter Roberson on 15 Jul 2020
No, there is no function provided for that. You can write such a function, though. The difficulty of doing it will depend upon whether you are working with a vector or something that is at least 2D (in which case it has to process per row or per column)
  5 Comments
Ryan
Ryan on 15 Jul 2020
Thanks a lot!
Actually, I though of setting the value as Inf. But I am afraid the program will have bugs during the later programming. Seriously...
It is not homework. Seriously...
Anyway, thanks a lot!
Walter Roberson
Walter Roberson on 15 Jul 2020
NR = 3;
[sortedvals, sortidx] = sort(YourVector);
LastSameIdx = 1;
MinVals = zeros(1,NR);
RandomIdx = zeros(1,NR);
for K = 1 : NR
LastSameIdx = 1;
while LastSameIdx < length(YourVector) && sortedvals(1) == sortedvals(LastSameIdx+1)
LastSameIdx = LastSameIdx + 1;
end
thisidx = randi(LastSameIdx);
MinVals(K) = sortedvals(thisidx);
RandomIdx(K) = sortidx(thisidx);
sortedvals(thisidx) = [];
sortidx(thisidx) = [];
end
Outputs are MinVals and RandomIdx.

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!