如何正确使用np.subtract的广播

周碧玉

我有2个矩阵,第一个的形状是(2,64),第二个的形状是(2,256,64),现在我想在这2个矩阵之间做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)

要么

res = np.array([np.subtract(matrix1[i], matrix2[i]) for i in range(2)]) ## shape is (2,256,64)

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

疯狂物理学家

您可以使用None(是的别名np.newaxis引入新轴来直接将它们对齐

matrix_1[:, None, :] - matrix2

除非要使用显式调用的某些功能,否则np.subtract减号(-)会更干净。

另一种选择是使用以下方法获得相同的视图np.expand_dims

np.expand_dims(matrix1, 1) - matrix2

您还可以reshape

matrix1.reshape(matrix1.shape[0], 1, *matrix1.shape[1:]) - matrix2

您提出的解决方案swapaxes有点过分,但可以使用:

(matrix1 - matrix2.swapaxes(0, 1)).swapaxes(0, 1)

swapaxes要获得原始形状,必须对结果进行最终处理。您可以使用以下方法实现类似的结果transpose

(matrix1 - matrix2.transpose(1, 0, 2)).swapaxes(1, 0, 2)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章