numpy broadcast from first dimension
numpy
functions often have blocks of code that check dimensions, reshape arrays into compatible shapes, all before getting down to the core business of adding or multiplying. They may reshape the output to match the inputs. So there is nothing wrong with rolling your own that do similar manipulations.
Don't offhand dismiss the idea of rotating the variable 3
dimension to the start of the dimensions. Doing so takes advantage of the fact that numpy
automatically adds dimensions at the start.
For element by element multiplication, einsum
is quite powerful.
np.einsum('ij...,ij...->ij...',im,mask)
will handle cases where im
and mask
are any mix of 2 or 3 dimensions (assuming the 1st 2 are always compatible. Unfortunately this does not generalize to addition or other operations.
A while back I simulated einsum
with a pure Python version. For that I used np.lib.stride_tricks.as_strided
and np.nditer
. Look into those functions if you want more power in mixing and matching dimensions.
how about use transpose:
(a.T + c.T).T