Python 在不使用for循环的情况下,对多个批次重复矩阵运算

Python 在不使用for循环的情况下,对多个批次重复矩阵运算,python,pytorch,batch-processing,matrix-multiplication,Python,Pytorch,Batch Processing,Matrix Multiplication,我试了一批,成功了 x = torch.FloatTensor([[ax,bx],[cx,dx],[ex,fx],[gx,hx]]) y = torch.FloatTensor([[ay,by],[cy,dy],[ey,fy],[gy,hy]]) z = x[:,None,0] * y[:,1] print(z) tensor([[ ax*by, ax*dy, ax*fy, ax*hy], [ cx*by, cx*dy, cx*fy, cx*hy],

我试了一批,成功了

x = torch.FloatTensor([[ax,bx],[cx,dx],[ex,fx],[gx,hx]])
y = torch.FloatTensor([[ay,by],[cy,dy],[ey,fy],[gy,hy]])
z = x[:,None,0] * y[:,1]

print(z)

tensor([[ ax*by,  ax*dy,  ax*fy,  ax*hy],
        [ cx*by,  cx*dy,  cx*fy,  cx*hy],
        [ ex*by,  ex*dy,  ex*fy,  ex*hy],
        [ gx*by,  gx*dy,  gx*fy,  gx*hy]])
我想在不使用for循环的情况下,对几个批次重复上述操作,如下面的示例

x = torch.FloatTensor([[[ax1,bx1],[cx1,dx1],[ex1,fx1],[gx1,hx1]],
                       [[ax2,bx2],[cx2,dx2],[ex2,fx2],[gx2,hx2]]])
y = torch.FloatTensor([[[ay1,by1],[cy1,dy1],[ey1,fy1],[gy1,hy1]],
                       [[ay2,by2],[cy2,dy2],[ey2,fy2],[gy2,hy2]]])
这就是我想要得到的结果

tensor([[[ ax1*by1,  ax1*dy1,  ax1*fy1,  ax1*hy1],
         [ cx1*by1,  cx1*dy1,  cx1*fy1,  cx1*hy1],
         [ ex1*by1,  ex1*dy1,  ex1*fy1,  ex1*hy1],
         [ gx1*by1,  gx1*dy1,  gx1*fy1,  gx1*hy1]],

        [[ ax2*by2,  ax2*dy2,  ax2*fy2,  ax2*hy2],
         [ cx2*by2,  cx2*dy2,  cx2*fy2,  cx2*hy2],
         [ ex2*by2,  ex2*dy2,  ex2*fy2,  ex2*hy2],
         [ gx2*by2,  gx2*dy2,  gx2*fy2,  gx2*hy2]]])
我尝试了以下方法,但出现了错误

z = x[...,None,0] * y[...,1]
RuntimeError: The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
没有for循环有什么方法可以做到这一点吗