Numpy Broadcast Addition Along Arbitrary Axes
I would like to add two arrays with different dimensions by simply performing an identical addition along one or more axes. A non-vectorized solution: x = np.array([[[1,2],[3,4],[5
Solution 1:
Look at the shapes of the two arrays:
>>> x.shape
(4, 3, 2)
>>> y.shape
(4, 2)
You see the addition will need to be broadcasted along the 0th and last axis here. A simple option would be
>>> x + y[:, None, :]
array([[[ 2, 4],
[ 4, 6],
[ 6, 8]],
[[10, 12],
[12, 4],
[ 4, 6]],
[[ 8, 10],
[10, 12],
[12, 14]],
[[16, 8],
[ 8, 10],
[10, 12]]])
Where,
>>> y[:, None, :].shape
(4, 1, 2)
Which effectively just changes the strides of y
so the addition can be broadcasted.
Better still, use np.expand_dims
as suggested by hpaulj in the comments, this'll add an extra penultimate dimension, so you could just do
>>> x + np.expand_dims(y, 1)
array([[[ 2, 4],
[ 4, 6],
[ 6, 8]],
[[10, 12],
[12, 4],
[ 4, 6]],
[[ 8, 10],
[10, 12],
[12, 14]],
[[16, 8],
[ 8, 10],
[10, 12]]])
Post a Comment for "Numpy Broadcast Addition Along Arbitrary Axes"