sklearn scikit machine learning learn fit example español datasets python numpy scikit-learn

python - scikit - Cómo normalizar una matriz en NumPy?



sklearn example (5)

Estoy de acuerdo en que era bueno si tal función formaba parte de las baterías incluidas. Pero no lo es, hasta donde yo sé. Aquí hay una versión para ejes arbitrarios y que ofrece un rendimiento óptimo.

import numpy as np def normalized(a, axis=-1, order=2): l2 = np.atleast_1d(np.linalg.norm(a, order, axis)) l2[l2==0] = 1 return a / np.expand_dims(l2, axis) A = np.random.randn(3,3,3) print(normalized(A,0)) print(normalized(A,1)) print(normalized(A,2)) print(normalized(np.arange(3)[:,None])) print(normalized(np.arange(3)))

Me gustaría tener la norma de una matriz NumPy. Más específicamente, estoy buscando una versión equivalente de esta función

def normalize(v): norm = np.linalg.norm(v) if norm == 0: return v return v / norm

¿Hay algo así en skearn o numpy ?

Esta función funciona en una situación donde v es el vector 0.


Puede especificar ord para obtener la norma L1. Para evitar la división cero, uso eps, pero quizás no sea genial.

def normalize(v): norm=np.linalg.norm(v, ord=1) if norm==0: norm=np.finfo(v.dtype).eps return v/norm


Si tiene datos multidimensionales y desea que cada eje se normalice a sí mismo:

def normalize(d): # d is a (n x dimension) np array d -= np.min(d, axis=0) d /= np.ptp(d, axis=0) return d

Utiliza la función numpys pico a pico .


Si usa scikit-learn, puede usar sklearn.preprocessing.normalize :

import numpy as np from sklearn.preprocessing import normalize x = np.random.rand(1000)*10 norm1 = x / np.linalg.norm(x) norm2 = normalize(x[:,np.newaxis], axis=0).ravel() print np.all(norm1 == norm2) # True


También está la función unit_vector() para normalizar vectores en el popular módulo de transformations de Christoph Gohlke:

import transformations as trafo import numpy as np data = np.array([[1.0, 1.0, 0.0], [1.0, 1.0, 1.0], [1.0, 2.0, 3.0]]) print(trafo.unit_vector(data, axis=1))