Python 如何正确使用np.subtract';广播

Python 如何正确使用np.subtract';广播,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有两个矩阵,第一个的形状是(2,64),第二个的形状是(2256,64),现在我想在这两个矩阵之间做np.subtract,因为np.subtract(matrix1,matrix2)不能自动广播,我做的如下 step_1 = np.subtract(matrix1[0], matrix2[0]).shape ## shape is (256,64) step_2 = np.subtract(matrix1[1], matrix2[1]).shape ## shape is (256,64

我有两个矩阵,第一个的形状是(2,64),第二个的形状是(2256,64),现在我想在这两个矩阵之间做np.subtract,因为
np.subtract(matrix1,matrix2)
不能自动广播,我做的如下

step_1 = np.subtract(matrix1[0], matrix2[0]).shape  ## shape is (256,64)
step_2 = np.subtract(matrix1[1], matrix2[1]).shape  ## shape is (256,64)
res = np.array([step_1, step_2]) ## shape is (2,256,64)


我是否可以在一个步骤中使用np.subtract(通过设置某些类型的参数)来获得相同的答案(或使用其他技术,如np.swapaxes)?

您可以使用
None
(它是的别名)引入一个新轴来直接对齐它们:

matrix_1[:, None, :] - matrix2
除非您想使用显式调用的某些功能,否则减号运算符(
-
)更干净

另一种选择是通过以下方式获得相同的视图:

您还可以:

您提出的解决方案有点激进,但会奏效:

(matrix1 - matrix2.swapaxes(0, 1)).swapaxes(0, 1)
结果上的最终
swapax
是恢复原始形状所必需的。您可以通过以下方式获得类似的结果:


@贾斯珀。我添加了更多的方法
np.expand_dims(matrix1, 1) - matrix2
matrix1.reshape(matrix1.shape[0], 1, *matrix1.shape[1:]) - matrix2
(matrix1 - matrix2.swapaxes(0, 1)).swapaxes(0, 1)
(matrix1 - matrix2.transpose(1, 0, 2)).swapaxes(1, 0, 2)