2017-05-04 1 views
1

Un moyen de le faire? Disons que j'ai A=[0.1 0.2 0.3 0.4], puis après normalisation, A_norm=[1 2 3 4], en fonction de l'importance de chacune de la valeur, cela signifie que 0,4 sera le plus grand (4 attribué) et 0,1 sera le moins (1 attribué).Normaliser les valeurs décimales au nombre entier (uniquement) dans matlab

Vous pourriez suggérer de seulement A_norm=A*10, mais notez que le nombre peut être n'importe quels nombres avec jusqu'à plus de 10 chiffres significatifs. Et de ne pas arrondir à leurs nombres entiers les plus proches aussi en utilisant la commande comme floorceil et round.

Merci!

+0

Quel est le résultat voulez-vous en cas de valeurs en double dans 'A'? – m7913d

+0

Dans le cas où les valeurs dupliquées de A existent, la 'valeur d'importance' devrait être la même –

Répondre

3

vous pouvez simplement utiliser la third output de unique, qui est le index de A triés. Notez que si vous utilisez l'option 'stable' ce sont les indices de la non triésA, il ne faut pas:

A=[0.1 0.2 0.3 0.4 0.005 0.4]; 
[~,~,A_norm] = unique(A); 
A_norm = A_norm.' 

A_norm = 

    2  3  4  5  1  5 
+0

Il peut être utile d'utiliser les mêmes noms que dans la question et d'expliquer comment fonctionne votre solution. – m7913d

+0

Pourquoi utilisez-vous '.'' au lieu de' ''? – m7913d

+1

merci pour les commentaires @ m7913d, j'ai édité ma réponse en conséquence. '.'' est l'opérateur de transposition (contrairement' '' qui est l'opérateur de transposition conjuguée complexe). Je l'utilise rarement et je sais que ce ne sont que des index ici (qui doivent être en nombre réel), mais d'autres ici ont commenté à ce sujet, alors j'ai adopté '.'' pour SO. – user2999345