3

Je dois implémenter une fonction qui normalise les coordonnées. Je définis Normaliser comme (s'il vous plaît suggérer un meilleur terme si mal Im):Normalisation des coordonnées 2D

entrées de mappage d'un ensemble de données de leur aire de répartition naturelle à des valeurs comprises entre 0 et 1.

Maintenant, c'était facile dans un dimension:

static List<float> Normalize(float[] nums) 
    { 
     float max = Max(nums); 
     float min = Min(nums); 
     float delta = max - min; 

     List<float> li = new List<float>(); 
     foreach (float i in nums) 
     { 
      li.Add((i - min)/delta); 
     } 
     return li; 
    } 

J'ai aussi besoin d'une version 2D et de garder le format intact. Mais j'ai quelques problèmes pour comprendre les maths. Bien que le code affiché soit en C#, les réponses ne doivent pas nécessairement l'être.

Merci d'avance. :)

Répondre

1

Idée simple: Trouvez quelle dimension est la plus grande et la plus normalisée dans cette dimension. La deuxième dimension peut être calculée en utilisant le ratio. De cette façon, le rapport est conservé et vos valeurs sont comprises entre 0 et 1.

+0

Vous voulez dire que je devrais calculer * delta * pour les deux dimensions et utiliser le nombre le plus élevé pendant la normalisation des deux? – Mizipzor

+0

Oui, ça fait la même chose et c'est encore plus simple :). – kasten

5

Il semble que vous voulez que chaque vecteur (1D, 2D ou ND) ait la longueur <= 1.
Si c'est la seule exigence, vous pouvez simplement diviser chaque vecteur par la longueur de la plus longue.

double max = maximum (|vector| for each vector in 'data'); 
foreach (Vector v : data) { 
    li.add(v/max); 
} 

qui fera le vecteur le plus long dans la liste des résultats pour avoir une longueur 1.

Mais ce ne sera pas équivalent de votre code actuel pour le cas 1 dimensions, comme vous ne pouvez pas trouver minimum ou maximum dans un ensemble de points sur l'avion. Ainsi, aucun delta.

+0

Battez-moi :) :) – ChrisF

+0

Hm. Peut-être que j'ai fait un mauvais appel en voulant la valeur la plus basse à 0 et la plus élevée à 1. Je suppose que c'est habituellement la façon préférée de normaliser les coordonnées? – Mizipzor

+0

@mizipzor Vous pouvez choisir un vecteur à zéro et le soustraire de chaque vecteur en entrée. Dites, vous avez (0, 1), (1, 0) et (2, 2) et obtenez (0, 0), (1, -1), (2, 1) en déplaçant le premier vecteur à zéro. –