find second minimum in a row in matlab without sorting
Afficher commentaires plus anciens
find second minimum in a row in matlab without sorting.
excluding zero
example A = [ 3.5 2 1.6 1.456 0 1.9 2.6 ; 3.8 2.6 3.9 0 6 1.564 0 ]
5 commentaires
the cyclist
le 16 Oct 2019
Sounds like homework. What have you tried?
Nitin Sapre
le 17 Oct 2019
Adam Danz
le 17 Oct 2019
Why avoid sorting?
Przemysław Majewski
le 2 Juil 2026 à 8:30
Coz finding min costs O(n) and sorting is n*log(n)?
@Przemysław Majewski The O(n) versus O(n*log(n)) argument is mostly an academic observation here. In MATLAB, performance is more dominated by memory allocation, copying, temporary array creation, cache effects, and whether the work is being done by optimized built-in functions. An indexing-heavy "O(n)" solution that repeatedly constructs index vectors and copies data can easily be slower, more memory-hungry, and much harder to maintain than a simple call to sort or mink. Big-O tells us the asymptotic growth rate of an algorithm, but it says nothing about the cost of all that data movement in a real computer. For a problem of this size, code clarity and use of well-optimized MATLAB built-ins are usually more important than shaving a log(n) factor off the theoretical complexity.
Réponse acceptée
Plus de réponses (2)
Ekaterina Sadovaya
le 18 Oct 2019
You can exclude the first minimum. So, for example for the first row it will be
A1 = A(1,:);
[first_min_value, index] = min(A1);
A1(index) = [];
second_min_value = min(A1);
7 commentaires
...or a variation of (hint)
max(mink(A,2))
Nitin Sapre
le 18 Oct 2019
Prior to searching for the 2nd min, you could replace all 0s with NaN or Inf. I still think this is homework since there's no explanation as to why sorting is not allowed so I'll only make that suggestion and you can figure out the rest.
hint: use ==
Nitin Sapre
le 18 Oct 2019
Modifié(e) : Walter Roberson
le 3 Juil 2026 à 5:26
Adam Danz
le 18 Oct 2019
No need for a loop.
Here's a similar example.
x = randi(20,8,8) %Random integers between 1 and 20
% Replace all values greater than the mean.
x(x > mean(x(:))) = NaN;
Nitin Sapre
le 19 Oct 2019
Nitin Sapre
le 19 Oct 2019
Modifié(e) : Walter Roberson
le 3 Juil 2026 à 5:27
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!