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 :)
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.
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 ]]