# How to normalize a NumPy array to a unit vector?

If you're using scikit-learn you can use `sklearn.preprocessing.normalize`

:

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

I would agree that it were nice if such a function was part of the included batteries. But it isn't, as far as I know. Here is a version for arbitrary axes, and giving optimal performance.

`import numpy as npdef 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)))`

This might also work for you

`import numpy as npnormalized_v = v / np.sqrt(np.sum(v**2))`

but fails when `v`

has length 0.

In that case, introducing a small constant to prevent the zero division solves this.