obtenir une seconde max élément dans matlab
J'ai un tableau, dire A = [ 3 5 6 7 ]
. Je sais que je peux obtenir la valeur maximale de ce tableau avec max(A)
et il retourne 7
, mais comment puis-je obtenir la seconde max (6
) à partir de cette matrice, sans tri ou le retrait de la première valeur maximale?
quel est votre préoccupation sur le tri? Je pose cette question car il est possible que vous êtes prématurément en essayant de l'optimiser. Toujours regarder uniquement pour l'essentiel goulot d'étranglement de votre programme si il est lent.
en raison de l'évolution des indices :(.
voir la mise à jour dans ma réponse pour que
désolé, je n'ai pas le genre de chose. L'écriture explicite de l'algorithme est assez facile, vous le savez, non? Ma conjecture est que l'algorithme explicite sera plus lente que matlab de base de la fonction, bien que.
Donc, j'ai une supposition. Vous pouvez avoir linéaire, 1 passe, solution itérative; c'est facile à faire. Ou de base-fonction linéaire 3-passer de la solution (Barnaba, qui est sans doute plus rapide que le tri en fonction de la solution, et probablement plus rapide que 1 passe itératif). Êtes-vous toujours à la recherche de quelque chose de mieux?
en raison de l'évolution des indices :(.
voir la mise à jour dans ma réponse pour que
désolé, je n'ai pas le genre de chose. L'écriture explicite de l'algorithme est assez facile, vous le savez, non? Ma conjecture est que l'algorithme explicite sera plus lente que matlab de base de la fonction, bien que.
Donc, j'ai une supposition. Vous pouvez avoir linéaire, 1 passe, solution itérative; c'est facile à faire. Ou de base-fonction linéaire 3-passer de la solution (Barnaba, qui est sans doute plus rapide que le tri en fonction de la solution, et probablement plus rapide que 1 passe itératif). Êtes-vous toujours à la recherche de quelque chose de mieux?
OriginalL'auteur Yusef Mohamadi | 2012-12-02
Vous devez vous connecter pour publier un commentaire.
Je peux proposer suivantes délicats solution:
Ici
A(A~=max(A))
sera tableau temporaire qui ne contiennent pas de valeur maximale du tableau original. Que vous recevez au maximum de ce tableau.OriginalL'auteur Danil Asotsky
Tout d'abord, sauf si vous avez vraiment-vraiment de grands vecteurs, usage unique, et le second est le dernier indice.
Si vous souhaitez conserver le max élément et vous vecteur ne contient pas NaN vous pouvez essayer:
Si vous avez plusieurs indices avec la même valeur max, il est de votre choix pour inclure
Mise à JOUR:
Selon le commentaire de l'OP, à côté de la question, permettez-moi d'ajouter:
Vous pouvez également utiliser de tri sans modification du tableau d'origine:
Np, mon code ne retirez pas le max, mais la remplace. C'est donc une opération, si vous voulez préoccupation au sujet de la linéarité et de la consommation de mémoire de la solution.
Pouvez vous s'il vous plaît vérifier la mise à jour de réponse à vos préoccupations au sujet de l'aide
sort
?Petite erreur avec le edit:
sort
commandes de la plus petite à la plus grande, de sorte à faireidx(1)
donnera le minimum valeur. (Pour résoudre ce problème, neidx(end)
et de mêmeidx(end-1)
pour le prochain plus grand.)OriginalL'auteur Barnabas Szabolcs
Ce sujet
?
test:
OriginalL'auteur Acorbe