  Linear operators and optimisation are at the core of many algorithms used in
signal and image processing, remote sensing, and inverse problems. For small to
medium-scale problems, existing software packages (e.g., MATLAB, Python numpy
and scipy) allow for explicitly building dense (or sparse) matrices and
performing algebraic operations (e.g., computation of matrix-vector products
and manipulation of matrices) with syntax that closely represents their
corresponding analytical forms. However, many real application, large-scale
operators do not lend themselves to explicit matrix representations, usually
forcing practitioners to forego of the convenient linear-algebra syntax
available for their explicit-matrix counterparts. PyLops is an open-source
Python library providing a flexible and scalable framework for the creation and
combination of so-called linear operators, class-based entities that represent
matrices and inherit their associated syntax convenience, but do not rely on
the creation of explicit matrices. We show that PyLops operators can
dramatically reduce the memory load and CPU computations compared to
explicit-matrix calculations, while still allowing users to seamlessly use
their existing knowledge of compact matrix-based syntax that scales to any
problem size because no explicit matrices are required.
