Nach einigen Verarbeitungen an einem Audio- oder Bildarray muss es innerhalb eines Bereichs normalisiert werden, bevor es in eine Datei zurückgeschrieben werden kann. Dies kann folgendermaßen geschehen:
# Normalize audio channels to between -1.0 and +1.0
audio[:,0] = audio[:,0]/abs(audio[:,0]).max()
audio[:,1] = audio[:,1]/abs(audio[:,1]).max()
# Normalize image to between 0 and 255
image = image/(image.max()/255.0)
Gibt es eine weniger ausführliche und bequeme Möglichkeit, dies zu tun? matplotlib.colors.Normalize()
scheint nicht verwandt zu sein.
Wenn das Array sowohl positive als auch negative Daten enthält, würde ich gehen mit:
Wenn das Array enthält
nan
, könnte eine Lösung darin bestehen, sie einfach wie folgt zu entfernen:Je nach Kontext möchten Sie jedoch möglicherweise
nan
unterschiedlich behandeln . ZB interpolieren Sie den Wert, ersetzen Sie ihn durch zB 0 oder lösen Sie einen Fehler aus.Erwähnenswert, auch wenn es nicht die Frage von OP ist, Standardisierung :
quelle
scipy.stats.zscore
.f = a / np.max(np.abs(a))
Folgendes verwenden: ... es sei denn, das gesamte Array enthält alle Nullen (vermeiden Sie DivideByZero).numpy.ptp()
Gibt 0 zurück, wenn dies der Bereich ist, abernan
wenn es einennan
im Array gibt. Wenn der Bereich jedoch 0 ist, ist die Normalisierung nicht definiert. Dies wirft einen Fehler auf, wenn wir versuchen, mit 0 zu teilen.Sie können auch mit neu skalieren
sklearn
. Die Vorteile bestehen darin, dass Sie die Standardabweichung zusätzlich zur Mittelwertzentrierung der Daten normalisieren können und dies entweder auf der Achse, nach Features oder nach Datensätzen.Die Keyword - Argumente
axis
,with_mean
,with_std
sind selbsterklärend und werden in ihrem Standardzustand gezeigt. Das Argumentcopy
führt die Operation direkt aus, wenn es auf gesetzt istFalse
. Dokumentation hier .quelle
Sie können die Version "i" (wie in idiv, imul ..) verwenden, und sie sieht nicht schlecht aus:
Für den anderen Fall können Sie eine Funktion schreiben, um ein n-dimensionales Array durch Spalten zu normalisieren:
quelle
/=
anstelle von= .. / ..
Sie versuchen, die Werte
audio
zwischen -1 und +1 sowieimage
zwischen 0 und 255 min-max zu skalieren .Verwenden
sklearn.preprocessing.minmax_scale
, sollte Ihr Problem leicht lösen.z.B:
und
Hinweis : Nicht zu verwechseln mit der Operation, bei der die Norm (Länge) eines Vektors auf einen bestimmten Wert (normalerweise 1) skaliert wird , der üblicherweise auch als Normalisierung bezeichnet wird.
quelle
Eine einfache Lösung ist die Verwendung der Skalierer, die von der Bibliothek sklearn.preprocessing angeboten werden.
Der Fehler X_rec-X ist Null. Sie können den feature_range an Ihre Bedürfnisse anpassen oder sogar einen Standard-Scaler sk.StandardScaler () verwenden.
quelle
Ich habe versucht , folgende diese , und bekam den Fehler
Das
numpy
Array, das ich zu normalisieren versuchte, war eininteger
Array. Es scheint, dass sie das Typ-Casting in Versionen> veraltet1.10
haben, und Sie müssen es verwendennumpy.true_divide()
, um das zu beheben.img
war einPIL.Image
Objekt.quelle