Après avoir effectué un traitement sur un tableau audio ou d'image, il doit être normalisé dans une plage avant de pouvoir être réécrit dans un fichier. Cela peut être fait comme ceci:
# 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)
Existe-t-il une manière pratique et moins verbeuse de faire cela? matplotlib.colors.Normalize()
ne semble pas lié.
Si le tableau contient à la fois des données positives et négatives, j'irais avec:
Si le tableau contient
nan
, une solution pourrait être de simplement les supprimer comme suit:Cependant, selon le contexte, vous voudrez peut-être traiter
nan
différemment. Par exemple, interpolez la valeur, remplacez par par exemple 0, ou générez une erreur.Enfin, il convient de mentionner même si ce n'est pas la question d'OP, la standardisation :
la source
scipy.stats.zscore
.f = a / np.max(np.abs(a))
... sauf si le tableau entier est entièrement à zéro (évitez DivideByZero).numpy.ptp()
renvoie 0, si c'est la plage, maisnan
s'il y en a unenan
dans le tableau. Cependant, si la plage est 0, la normalisation n'est pas définie. Cela soulève une erreur lorsque nous tentons de diviser par 0.Vous pouvez également redimensionner en utilisant
sklearn
. Les avantages sont que vous pouvez ajuster la normalisation de l'écart type, en plus du centrage moyen des données, et que vous pouvez le faire sur l'un ou l'autre des axes, par entités ou par enregistrements.Les arguments de mots clés
axis
,with_mean
,with_std
sont explicites et sont présentés dans leur état par défaut. L'argumentcopy
effectue l'opération sur place s'il est défini surFalse
. Documentation ici .la source
Vous pouvez utiliser la version "i" (comme dans idiv, imul ..), et cela n'a pas l'air à moitié mauvais:
Dans l'autre cas, vous pouvez écrire une fonction pour normaliser un tableau à n dimensions par des colonnes:
la source
/=
place de= .. / ..
Vous essayez de mettre à l'échelle min-max les valeurs
audio
comprises entre -1 et +1 etimage
entre 0 et 255.L'utilisation
sklearn.preprocessing.minmax_scale
, devrait facilement résoudre votre problème.par exemple:
et
Remarque : à ne pas confondre avec l'opération qui met à l'échelle la norme (longueur) d'un vecteur à une certaine valeur (généralement 1), qui est également communément appelée normalisation.
la source
Une solution simple consiste à utiliser les scalers proposés par la bibliothèque sklearn.preprocessing.
L'erreur X_rec-X sera nulle. Vous pouvez ajuster feature_range pour vos besoins, ou même utiliser un scaler standart sk.StandardScaler ()
la source
J'ai essayé de suivre ça et j'ai eu l'erreur
Le
numpy
tableau que j'essayais de normaliser était uninteger
tableau. Il semble qu'ils aient désapprouvé la conversion de type dans les versions>1.10
, et vous devez utilisernumpy.true_divide()
pour résoudre cela.img
était unPIL.Image
objet.la source