python - Wie normalisiert man ein NumPy-Array innerhalb eines bestimmten Bereichs?




3 Answers

Sie können die sklearn auch mit sklearn . Die Vorteile sind, dass Sie die Standardabweichung normalisieren und zusätzlich die Daten zentrieren können, und zwar auf jeder Achse, nach Merkmalen oder nach Datensätzen.

from sklearn.preprocessing import scale
X = scale( X, axis=0, with_mean=True, with_std=True, copy=True )

Die Schlüsselwortargumentsachse, with_mean , with_std ist selbsterklärend und wird in ihrem Standardzustand angezeigt. Das Argument copy führt die Operation an Ort und Stelle durch, wenn sie auf False . Dokumentation here .

python arrays numpy scipy convenience-methods

Nach einer Verarbeitung in einem Audio- oder Bild-Array muss es innerhalb eines Bereichs normalisiert werden, bevor es in eine Datei zurückgeschrieben werden kann. Dies kann so gemacht werden:

# 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 Komfortfunktion, um 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:

import numpy as np

a = np.random.rand(3,2)

# Normalised [0,1]
b = (a - np.min(a))/np.ptp(a)

# Normalised [0,255] as integer
c = (255*(a - np.min(a))/np.ptp(a)).astype(int)

# Normalised [-1,1]
d = 2*(a - np.min(a))/np.ptp(a)-1

auch erwähnenswert, auch wenn es nicht OP-Frage ist, standardization :

e = (a - np.mean(a)) / np.std(a)



Ich habe versucht, dem zu folgen, und habe den Fehler bekommen

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''

Das numpy Array, das ich zu normalisieren versuchte, war ein integer Array. Es numpy.true_divide() , als hätten sie numpy.true_divide() in Versionen> 1.10 , und Sie müssen numpy.true_divide() , um das numpy.true_divide() zu lösen.

arr = np.array(img)
arr = np.true_divide(arr,[255.0],out=None)

img war ein PIL.Image Objekt.




Related