Посмотрите на формы двух массивов:
>>> x.shape
(4, 3, 2)
>>> y.shape
(4, 2)
Вы видите, что дополнение нужно будет транслировать вдоль 0-й и последней оси здесь. Простой вариант будет
>>> x + y[:, None, :]
array([[[ 2, 4],
[ 4, 6],
[ 6, 8]],
[[10, 12],
[12, 4],
[ 4, 6]],
[[ 8, 10],
[10, 12],
[12, 14]],
[[16, 8],
[ 8, 10],
[10, 12]]])
Где,
>>> y[:, None, :].shape
(4, 1, 2)
Что фактически просто изменяет шаги y
, так что добавление может транслироваться.
Еще лучше, используйте np.expand_dims
, как предложено hpaulj в комментариях, это добавит дополнительное предпоследнее измерение, так что вы можете просто сделать
>>> x + np.expand_dims(y, 1)
array([[[ 2, 4],
[ 4, 6],
[ 6, 8]],
[[10, 12],
[12, 4],
[ 4, 6]],
[[ 8, 10],
[10, 12],
[12, 14]],
[[16, 8],
[ 8, 10],
[10, 12]]])