我有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] 删除。
我来说两句