具体来说,实现如下:
def my_cross(x, y, dim=1):
assert x.dim() == y.dim() and dim < x.dim()
return torch.stack..., ...] * y[:, 0, ...] - x[:, 0, ...] * y[:, 2, ...],
x[:, 0, ...] * y[:, 1, ...] - x[:, 1..., ...] * y[:, 0, ...],
),
dim=dim,
)
注意:这里是以dim=1为例写的实现,如果是在别的维度进行cross操作,需要修改dim....] - x[:, 2, ...] * y[:, 1, ...],
x[:, 2, ...] * y[:, 0, ...] - x[:, 0, ...] * y[:, 2, ......],
x[:, 0, ...] * y[:, 1, ...] - x[:, 1, ...] * y[:, 0, ...],
),
dim=dim