Normaliser les colonnes du tableau de numpy en python

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

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

N'importe quelle idée de comment je peux normaliser des rangées de ce numpy.tableau où chaque valeur est 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 :)

31
demandé sur ahajib 2015-04-16 00:51:13

2 réponses

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 radiodiffusion.

en commençant par votre exemple array:

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 dimension 0 (c'est-à-dire les lignes). Cela vous donne un vecteur de taille (ncols,) contenant la valeur maximale dans chaque colonne. Vous pouvez alors diviser x par ce vecteur afin de normaliser vos valeurs telles que la valeur maximale dans chaque colonne sera réduite à 1.


Si x contient des valeurs négatives dont vous auriez besoin pour soustraire le minimum d'abord:

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

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

67
répondu ali_m 2016-01-29 22:51:48

Vous pouvez utiliser sklearn.prétraitement:

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 ]]
10
répondu Marcin Mrugas 2017-05-30 08:45:20