web-dev-qa-db-fra.com

Normaliser les colonnes du tableau numpy dans python

J'ai un tableau numpy où chaque cellule d'une ligne spécifique représente une valeur pour une fonctionnalité. Je les stocke tous dans une matrice de 100 * 4.

A     B   C
1000  10  0.5
765   5   0.35
800   7   0.09  

Avez-vous une idée de la façon dont je peux normaliser les lignes de ce numpy.array où chaque valeur est comprise entre 0 et 1?

Ma sortie désirée est:

A     B    C
1     1    1
0.765 0.5  0.7
0.8   0.7  0.18(which is 0.09/0.5)

Merci d'avance :)

42
ahajib

Si je comprends bien, ce que vous voulez faire est de diviser par la valeur maximale dans chaque colonne. Vous pouvez le faire facilement en utilisant diffusion .

En commençant par votre exemple de tableau:

import numpy as np

x = np.array([[1000,  10,   0.5],
              [ 765,   5,  0.35],
              [ 800,   7,  0.09]])

x_normed = x / x.max(axis=0)

print(x_normed)
# [[ 1.     1.     1.   ]
#  [ 0.765  0.5    0.7  ]
#  [ 0.8    0.7    0.18 ]]

x.max(0) prend le maximum sur la 0ème dimension (c'est-à-dire les lignes). Cela vous donne un vecteur de taille (ncols,) Contenant la valeur maximale dans chaque colonne. Vous pouvez ensuite diviser x par ce vecteur afin de normaliser vos valeurs de sorte que la valeur maximale dans chaque colonne soit mise à l'échelle à 1.


Si x contient des valeurs négatives, vous devez d'abord soustraire le minimum:

x_normed = (x - x.min(0)) / x.ptp(0)

Ici, x.ptp(0) renvoie le "pic à pic" (c'est-à-dire la plage, max - min) le long de l'axe 0. Cette normalisation garantit également que la valeur minimale dans chaque colonne sera 0.

89
ali_m

Vous pouvez utiliser sklearn.preprocessing:

from sklearn.preprocessing import normalize
data = np.array([
    [1000, 10, 0.5],
    [765, 5, 0.35],
    [800, 7, 0.09], ])
data = normalize(data, axis=0, norm='max')
print(data)
>>[[ 1.     1.     1.   ]
[ 0.765  0.5    0.7  ]
[ 0.8    0.7    0.18 ]]
16
Marcin Mrugas