numpy divide along axis numpy divide along axis numpy numpy

numpy divide along axis


For the specific example you've given: dividing an (l,m,n) array by (m,) you can use np.newaxis:

a = np.arange(1,61, dtype=float).reshape((3,4,5)) # Create a 3d array a.shape                                           # (3,4,5)b = np.array([1.0, 2.0, 3.0, 4.0])                # Create a 1-d arrayb.shape                                           # (4,)a / b                                             # Gives a ValueErrora / b[:, np.newaxis]                              # The result you want 

You can read all about the broadcasting rules here. You can also use newaxis more than once if required. (e.g. to divide a shape (3,4,5,6) array by a shape (3,5) array).

From my understanding of the docs, using newaxis + broadcasting avoids also any unecessary array copying.

Indexing, newaxis etc are described more fully here now. (Documentation reorganised since this answer first posted).


I think you can get this behavior with numpy's usual broadcasting behavior:

In [9]: a = np.array([[1., 2.], [3., 4.]])In [10]: a / np.sum(a, axis=0)Out[10]:array([[ 0.25      ,  0.33333333],       [ 0.75      ,  0.66666667]])

If i've interpreted correctly.

If you want the other axis you could transpose everything:

> a = np.random.randn(4,3).transpose()> norms = np.apply_along_axis(np.linalg.norm,0,a)> c = a / norms> np.apply_along_axis(np.linalg.norm,0,c)array([ 1.,  1.,  1.,  1.])