Search code examples
pythonmatrixscipytranspose

Find and use the transpose of a linear operator in python


I have a complicated linear system $y = Ax$ where I cannot specify the matrix A, I can however write a function that computes Ax, and I have made this into a linear operator.

I need to find $A^T$.

I have tried finding $A^T$ by hand but it is becoming tricky.

I found that scipy has a built in function .transpose(), I have tried using this with a simple example,

def mv(v):
    return np.array([2*v[0]- v[1], 3*v[1]])
A = LinearOperator((2,2), matvec=mv)
C = A.transpose()

but then when I try to use this it doesn't seem to work. I tried comparing the results

A.matvec(np.ones(2))
array([1., 3.])
C.rmatvec(np.ones(2))
array([1., 3.])

but the results are the same? I'm not sure why this is, surely the second result should be [2, 2].


Solution

  • To find the transpose of a function you would need to use automatic differentiation which python has in built tools for. I managed, in the end, to find the transpose of my linear operator by hand.