Редактировать: Улучшенное решение, первое решение использовало некоторую ненужную транспонирование.
Для операций такого типа np.tensordot и np.einsum могут быть вашими друзьями. К ним может быть трудно привыкнуть, поэтому я сделал это следующим образом: (обратите внимание, что для транспонирования и изменения формы массивов в numpy это очень быстро, требуется только изменение шагов массив, поэтому время, которое требуется, не увеличивается с размером вашего набора данных, вы можете прочитать об этом здесь .
a = np.array([0,10])
b = np.arange(600).reshape(10,2,30)
#making a same dimention as b
a = a.reshape((1,2,1))
c = a*b
Мы хотим умножить a и b вдоль некоторой оси поэтому мы изменяем форму, чтобы массивы совпадали по этой оси, а затем умножаем их.
Скорее всего, существует более элегантный способ сделать это, но он работает и довольно быстрый (0,004 с, если имеет длину 20 и b имеет форму (100, 20, 300).