@ ответ макроэкономиста абсолютно правильный и содержит хорошее объяснение правил вещания. Единственное, что я должен добавить, это то, что вы можете сделать синтаксис немного более лаконичным, используя None
вместо np.newaxis
. Я хотел увидеть трансляцию в действии, поэтому я написал короткий демонстрационный сценарий:
import numpy as np
T = np.arange(4*5*6*7).reshape(4,5,6,7)
w = np.random.randint(1, 10, size=5)
res = T*w[:, None, None]
print('res shape\n%s\n' % (res.shape,))
print('T[:, 2, :, 0]\n%s\n' % T[:, 2, :, 0])
print('T[:, 2, :, 0] * w[2]\n%s\n' % (T[:, 2, :, 0]*w[2]))
print('res[:, 2, :, 0]\n%s\n' % res[:, 2, :, 0])
Выход:
res shape
(4, 5, 6, 7)
T[:, 2, :, 0]
[[ 84 91 98 105 112 119]
[294 301 308 315 322 329]
[504 511 518 525 532 539]
[714 721 728 735 742 749]]
T[:, 2, :, 0] * w[2]
[[ 588 637 686 735 784 833]
[2058 2107 2156 2205 2254 2303]
[3528 3577 3626 3675 3724 3773]
[4998 5047 5096 5145 5194 5243]]
res[:, 2, :, 0]
[[ 588 637 686 735 784 833]
[2058 2107 2156 2205 2254 2303]
[3528 3577 3626 3675 3724 3773]
[4998 5047 5096 5145 5194 5243]]