[[x1[i][j] * x2[i][j] for j in range(5)] for i in range(2)]
также использует вещание.
x1[i,j].shape # (10,)
x2[i,j].shape # (10,10)
Чтобы умножить их, правила вещания добавляют измерение:
(10,), (10,10) => (1,10), (10,10) => (10,10)
Но если бы вы использовали x1[i,j,:,None]
, трансляция пошла бы
(10,1), (10,10) => (10,10)
производит разные числа.
В формате @ norok2 это разница между:
x1[:, :, None, :] * x2
x1[:, :, :, None] * x2
Разница была бы более очевидной, если бы x2
имел форму (2,5,8,10) или (2,5,10,8).