Python 如何正确使用np.subtract';广播
我有两个矩阵,第一个的形状是(2,64),第二个的形状是(2256,64),现在我想在这两个矩阵之间做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
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)