2012-04-28 8 views
15

Ich möchte grundlegende Matlab-Programm erstellen, das gegebene Array von Integer in dem angegebenen Bereich normalisiert.Normalisierung im variablen Bereich [x, y] in Matlab

  • Eingänge sind ein Array [a1, a2, a3, a4, a5, a6, a7 ...], und der Bereich [x, y]
  • Output normalisiert Array.

Aber überall sehe ich die Normalisierung im Bereich von [0,1] oder [-1,1]. Normale Bereichsvariable kann nicht gefunden werden. Ich wäre Ihnen dankbar, wenn Sie den Matlab-Code oder die Formel für den variablen Bereich schreiben würden.

Vielen Dank für Ihre Ideen.

Antwort

41

Wenn Sie wollen [x, y] normalisieren, normalisieren zuerst [0, 1] über:

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

Dann maßstabs [x,y] über:

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

es Putting alles zusammen:

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

Groß Lösung, aber für Momente schien es, Python und ich kopierte - ohne Klo kopiert König: P (und nachdem ich aufgewertet und kommentiert habe, schaute ich in den Titel und sah, dass das für Matlab war! Entschuldigung, obwohl es sehr hilfreich war!) –

+0

Was passiert, wenn ich nicht den Eingabebereich habe? Nehmen wir an, ich möchte eine Zahl von zB 345 in den Bereich [-1,1] – superpuccio

+0

@superpuccio setzen:? Können Sie erklären, was Sie fragen? – Max