Вещание выравнивает размеры справа.Итак, вы хотите работать с массивом (2, 1, 1, 1)
и массивом (2, 2, 3)
.
Самый простой способ, о котором я могу подумать, это использовать reshape
:
Y = Y.reshape(-1, 1, 1, 1)
В более общем смысле:
Y = Y.reshape(-1, *([1] * X.ndim))
Максимум одним из аргументов reshape
может быть -1, что указывает на все оставшиеся размеры, не учитываемые другими измерениями.
Чтобы получить Z
формы (2, 2, 2, 3)
:
Z = X - Y.reshape(-1, *([1] * X.ndim))
Если бы вы были в порядке с Z
формы (2, 2, 3, 2)
, операция была бы намного проще:
Z = X[..., None] - Y
None
или np.newaxis
вставит ось единицы в конец фигуры X
, обеспечивая правильную трансляцию с 1D Y
.