Se ho capito bene, ciò che si vuole fare è dividere per il valore massimo in ogni colonna. Puoi farlo facilmente usando broadcasting.
Partendo tuo esempio matrice:
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)
batte massima sulla dimensione 0th (cioè righe). Questo ti dà un vettore di dimensioni (ncols,)
contenente il valore massimo in ogni colonna. È quindi possibile dividere x
da questo vettore al fine di normalizzare i valori in modo che il valore massimo in ogni colonna verrà scalata a 1.
Se x
contiene valori negativi si avrebbe bisogno di sottrarre il minimo prima:
x_normed = (x - x.min(0))/x.ptp(0)
Qui, x.ptp(0)
restituisce il "picco-picco" (vale a dire il campo, max - min) lungo l'asse 0. Questa normalizzazione garantisce, inoltre, che il valore minimo in ogni colonna sarà 0.
fonte
2015-04-15 22:02:04
Giusto per essere chiari: si tratta di una serie o di un NumPy Pandas dataframe? –
Durante la programmazione è importante essere specifici: un 'set' è un oggetto particolare in Python e non è possibile avere un set di array numpy. Python non ha una matrice, ma numpy lo fa, e quel tipo 'matrix' non è lo stesso di un numpy' array/ndarray' (che è esso stesso diverso dal tipo 'array' di Python, che non è lo stesso di un 'list'). E nessuno di questi è 'DataFrame's di panda .. – DSM
@ajcr scusa per gli errori di battitura. Ho modificato la mia domanda. Grazie – ahajib