Вы можете просто сделать -
for k, v in d.items():
d[k] = (v.T*m).T
Итак, мы в основном толкаем первую ось до конца, так что v
становится транслируемым против m
. Затем умножьте на m
. Наконец, толкая последнюю ось назад к передней части.
Могут быть различные способы перестановки этих осей, но transposing
является самым простым.
Если маска имеет больше измерений, чем 1
, нам тоже нужно транспонировать m
. Следовательно. для этого случая это будет d[k] = (v.T*m.T).T
.
Другой способ будет изменить форму m
, а затем умножить на v
-
for k, v in d.items():
d[k] = v*m.reshape(m.shape + (1,)*(v.ndim-m.ndim))
Идругой с np.einsum
-
for k, v in d.items():
d[k] = np.einsum('i...,i->i...',v,m)