Normaliser les lignes d'une matrice python
Donné un tableau en 2 dimensions en python, je tiens à normaliser chaque ligne avec les normes suivantes:
- Norme 1: L_1
- Norme 2: L_2
- Norme Inf: L_Inf
J'ai commencé ce code:
from numpy import linalg as LA
X = np.array([[1, 2, 3, 6],
[4, 5, 6, 5],
[1, 2, 5, 5],
[4, 5,10,25],
[5, 2,10,25]])
print X.shape
x = np.array([LA.norm(v,ord=1) for v in X])
print x
De sortie:
(5, 4) # array dimension
[12 20 13 44 42] # L1 on each Row
Comment puis-je modifier le code tel que SANS l'aide de la BOUCLE, je peux avoir directement les lignes de la matrice normalisée? (Compte tenu de la norme des valeurs ci-dessus)
J'ai essayé :
l1 = X.sum(axis=1)
print l1
print X/l1.reshape(5,1)
[12 20 13 44 42]
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
mais la sortie est égale à zéro.
OriginalL'auteur Yas | 2016-03-28
Vous devez vous connecter pour publier un commentaire.
C'est le L₁ norme:
C'est le L₂ norme:
C'est la norme L∞:
À normaliser les lignes, juste diviser par la norme. Par exemple, à l'aide de L₂ normalisation:
edit: Mieux est d'utiliser la méthode de ayhan si vous l'avez à disposition:
edit2: Vous avez obtenu des valeurs égales à zéro parce que vous n'avez division entière. Voici comment faire pour éviter cela:
Donc suffit de la diviser par la norme, évidemment
Merci, je suis très bien avec la façon dont la norme est calculée, mais pendant la plongée, la matrice par la norme des valeurs, j'obtiens des valeurs nulles. Veuillez voir ma question initiale de modification.
Merci, le problème a été résolu. Iayhan et wim de vos deux réponses étaient correctes, mais je peux marquer un comme une réponse, désolé pour ça.
OriginalL'auteur wim
Vous pouvez passer
axis=1
paramètre:ord=np.inf
pour la norme L∞Merci pour ce -
scipy.linalg.norm
a une interface différente qui n'a pas laaxis
kwarg, donc je n'ai pas le remarquerOriginalL'auteur ayhan