I have a matrix that is size ([4, 3, 50, 50, 50]). I’m looking for a way to take each 4 by 3 element and take the inverse of the first 3 channels matrix multiplied by the last channel. I came up with a solution that uses a lot of unbind operations. It uses
z_ls = []
for z in torch.unbind(sum_conv, -1):
    y_ls = []
    for y in torch.unbind(z, -1):
        x_ls = []
        for x in torch.unbind(y,-1):
            res = torch.inverse(x[:-1,...]).mm(-x[-1,...][...,None])#This should be right

            x_ls.append(res)
        x_ls = torch.cat(x_ls, -1)
        y_ls.append(x_ls)
    y_ls = torch.stack(y_ls, -1)[...,None]
    z_ls.append(y_ls)
z_ls = torch.cat(z_ls, -1)

I’m wondering if there is a better way to go about this. Is there a way I can perform some sort of convolution operation and then just modify it so I perform other operations instead of normal matrix multiplication?