Is it possible to calculate the pseudo inverse of n
matrices in one tensor?
Input tensor (input
) has the shape of [n, rows, columns]
and in the output should be a tensor (let’s call it pinv
) with shape of [n, columns, rows]
which for each i
, pinv[i, :,:]
is the pseudo inverse of input[i, :, :]
.
Hi,
We do have a batch version of the inverse
method but not the pinverse
I’m afraid.
then it should be possible to calculate the batch pseudo inverse using the batch inverse like this:
def pinv(self, A):
P1 = th.matmul(A.transpose(1,2), A)
P2 = P1.inverse()
P3 = th.matmul(P2, A.transpose(1,2))
return P3
right?
Of course it would be the left inverse
pinverse happily takes batches:
a = torch.randn(5,6,3)
b = torch.pinverse(a)
c = torch.stack([torch.pinverse(a_i) for a_i in a], 0)
print((b-c).abs().max())
gives 5e-8 ish discrepancy.
As it goes with Linear Algebra, the invariably awesome @vishwakftw implemented it just in time for the 1.3 release.
As a general rule, the nicely named linear algebra functions do batches.
Best regards
Thomas
1 Like
Ho nice !
I was looking at the doc and this change was not reflected there. I’ll fix that quickly.