# Subtracting numpy arrays of different shape efficiently

Using the excellent broadcasting rules of numpy you can subtract a shape (3,) array `v` from a shape (5,3) array `X` with

``````X - v
``````

The result is a shape (5,3) array in which each row `i` is the difference `X[i] - v`.

Is there a way to subtract a shape (n,3) array `w` from `X` so that each row of `w` is subtracted form the whole array `X` without explicitly using a loop?

You need to extend the dimensions of `X` with `None/np.newaxis` to form a 3D array and then do subtraction by `w`. This would bring in `broadcasting` into play for this `3D` operation and result in an output with a shape of `(5,n,3)`. The implementation would look like this –

``````X[:,None] - w  # or X[:,np.newaxis] - w
``````

Instead, if the desired ordering is `(n,5,3)`, then you need to extend the dimensions of `w` instead, like so –

``````X - w[:,None] # or X - w[:,np.newaxis]
``````

Sample run –

``````In : X
Out:
array([[5, 5, 4],
[8, 1, 8],
[0, 1, 5],
[0, 3, 1],
[6, 2, 5]])

In : w
Out:
array([[8, 5, 1],
[7, 8, 6]])

In : (X[:,None] - w).shape
Out: (5, 2, 3)

In : (X - w[:,None]).shape
Out: (2, 5, 3)``````