as_scipy_operator

odl.operator.oputils.as_scipy_operator(op)[source]

Wrap op as a scipy.sparse.linalg.LinearOperator.

This is intended to be used with the scipy sparse linear solvers.

Parameters:
opOperator

A linear operator that should be wrapped

Returns:
``scipy.sparse.linalg.LinearOperator``linear_op

The wrapped operator, has attributes matvec which calls op, and rmatvec which calls op.adjoint.

Notes

If the data representation of op's domain and range is of type NumpyTensorSpace this incurs no significant overhead. If the space type is CudaFn or some other nonlocal type, the overhead is significant.

Examples

Wrap operator and solve simple problem (here toy problem Ix = b)

>>> op = odl.IdentityOperator(odl.rn(3))
>>> scipy_op = as_scipy_operator(op)
>>> import scipy.sparse.linalg as scipy_solvers
>>> result, status = scipy_solvers.cg(scipy_op, [0, 1, 0])
>>> result
array([ 0.,  1.,  0.])