Subtracting numpy arrays of different shape efficiently

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 [39]: X
Out[39]: 
array([[5, 5, 4],
       [8, 1, 8],
       [0, 1, 5],
       [0, 3, 1],
       [6, 2, 5]])

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

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

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

Leave a Comment