# How to normalize a 2-dimensional numpy array in python less verbose?

## How to normalize a 2-dimensional numpy array in python less verbose?

Broadcasting is really good for this:

``````row_sums = a.sum(axis=1)
new_matrix = a / row_sums[:, numpy.newaxis]
``````

`row_sums[:, numpy.newaxis]` reshapes row_sums from being `(3,)` to being `(3, 1)`. When you do `a / b`, `a` and `b` are broadcast against each other.

Scikit-learn offers a function `normalize()` that lets you apply various normalizations. The make it sum to 1 is called L1-norm. Therefore:

``````from sklearn.preprocessing import normalize

matrix = numpy.arange(0,27,3).reshape(3,3).astype(numpy.float64)
# array([[  0.,   3.,   6.],
#        [  9.,  12.,  15.],
#        [ 18.,  21.,  24.]])

normed_matrix = normalize(matrix, axis=1, norm=l1)
# [[ 0.          0.33333333  0.66666667]
#  [ 0.25        0.33333333  0.41666667]
#  [ 0.28571429  0.33333333  0.38095238]]
``````

Now your rows will sum to 1.

#### How to normalize a 2-dimensional numpy array in python less verbose?

I think this should work,

``````a = numpy.arange(0,27.,3).reshape(3,3)

a /=  a.sum(axis=1)[:,numpy.newaxis]
``````