Obtenir les indices des n plus grands éléments dans une matrice
Supposons que j'ai la matrice suivante:
01 02 03 06
03 05 07 02
13 10 11 12
32 01 08 03
Et je veux les indices dans le top 5 des éléments (dans ce cas, 32, 13, 12, 11, 10). Quelle est la façon la plus propre de faire cela dans MATLAB?
- Une précision: Comment voudriez-vous traiter avec des éléments répétés? Par exemple, si le numéro 32 est apparu 7 fois, vous souhaitez obtenir des indices pour l'ensemble des 7, ou seulement cinq d'entre eux, ou seulement 1 d'entre eux et les indices pour les 4 plus grands éléments?
- Leschinski s'il vous Plaît ne pas ajouter des balises de titres, il n'est pas nécessaire et généralement découragés par la communauté (voir cette méta post pour la réponse officielle sur ce sujet)
Vous devez vous connecter pour publier un commentaire.
Il existe quelques façons dont vous pouvez faire ce en fonction de comment vous voulez traiter avec des valeurs répétées. Voici une solution qui trouve des indices pour les 5 valeurs les plus grandes (qui pourraient inclure des valeurs répétées) à l'aide de
sort
:Voici une solution qui trouve les 5 plus gros unique valeurs, puis trouve tous éléments égaux à ceux des valeurs (qui pourrait être de plus de 5 si il y a des valeurs répétées), à l'aide de
unique
etismember
:unique(A)
dans la première ligne devrait fonctionner.Si vous avez un grand tableau et que vous souhaitez uniquement quelques éléments en dehors de ça. Ce serait ma solution.
Je pense qu'il devrait être plus rapide et moins de RAM exigeant que le type de solution.
Vous pouvez trouver de bonnes réponses à matlab questions aussi sur matlabcentral. J'ai trouvé une bonne mex mise en œuvre, tandis que la recherche de la même chose.
Il est fait par Bruno Luong à l'aide d'un partiel de tri rapide de l'algorithme mis en œuvre avec le C-MEX. La complexité est O(n + k.log(k)), où n est la taille du tableau, et k est le nombre d'éléments sélectionnés. Il est plus rapide que le TRI ou plusieurs appels de MIN/MAX pour la grande taille des entrées. Multidimensionnelle de la capacité de prises en charge
http://www.mathworks.com/matlabcentral/fileexchange/23576-minmax-selection
Dans MATLAB ≥ R2017b, vous pouvez utiliser
maxk
pour ce but précis.