2012-04-28 10 views
15

Quiero crear un programa básico de matlab que normalice el conjunto de enter dado en el rango dado.Normalización en el rango variable [x, y] en Matlab

  • Las entradas son una matriz [a1, a2, a3, a4, a5, a6, a7 ...], y el rango [x, y]
  • salida es matriz normalizada.

Pero en todas partes, veo la normalización en el rango de [0,1] o [-1,1]. No se puede encontrar la normalización de rango variable. Le agradeceré que escriba el código de matlab o la fórmula para el rango variable.

Gracias por las ideas.

Respuesta

41

Si desea normalizar a [x, y], primero normalizar a [0, 1] a través de:

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

Escalar hasta [x,y] a través de:

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

Poniendo todo junto:

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; 
+1

Gran solución, pero por momentos parecía que Python y yo copiémos-pegáramos sin perder king: P (y después de votar y comentar, miré el título y vi que era para matlab! lo siento, aunque fue muy útil!) –

+0

¿Qué pasa si no tengo el rango de entrada? Digamos que me gustaría poner un número, por ejemplo 345, en el rango [-1,1] – superpuccio

+0

@superpuccio:? ¿Puedes aclarar lo que estás preguntando? – Max