web-dev-qa-db-fra.com

Normalisation dans la plage variable [x, y] dans Matlab

Je veux créer un programme matlab de base qui normalise un tableau donné de nombres entiers dans la plage donnée. 

  • Les entrées sont un tableau [a1, a2, a3, a4, a5, a6, a7 ...] et la plage [x, y]
  • La sortie est un tableau normalisé. 

Mais partout, je vois la normalisation dans la plage de [0,1] ou de [-1,1]. Impossible de trouver une normalisation de plage variable. Je vous serais reconnaissant d’écrire le code matlab ou la formule pour la plage de variables. 

Merci pour les idées. 

17
fiasco

Si vous voulez normaliser à [x, y], commencez par normaliser à [0, 1] via:

 range = max(a) - min(a);
 a = (a - min(a)) / range;

Puis passez à [x,y] via:

 range2 = y - x;
 a = (a * range2) + x;

Mettre tous ensemble:

 function normalized = normalize_var(array, x, y)

     % Normalize to [0, 1]:
     m = min(array);
     range = max(array) - m;
     array = (array - m) / range;

     % Then scale to [x,y]:
     range2 = y - x;
     normalized = (array*range2) + x;
49
Max

MATLAB a une fonction spéciale pour la normalisation. Celles-ci sont incluses dans la boîte à outils Artificial Neural Network, utilisée pour les valeurs d’entrée de normalisation.

mapminmax

mapminmax traite les matrices en normalisant les valeurs minimale et maximale de chaque ligne à [YMIN, YMAX].

mapstd

mapstd traite les matrices en transformant la moyenne et l'écart type de chaque ligne en ymean et ystd.

Plus d'information

0
PyMatFlow

À partir de R2017b, MATLAB a cette fonction appelée rescale qui fait exactement cela.
c'est à dire. si vous voulez redimensionner array à l'intervalle [x, y], alors:

normalized_array = rescale(array, x, y);

Si x et y ne sont pas spécifiés, array est normalisé à l'intervalle [0,1].

0
Sardar Usama