pylops.Identity¶
- class pylops.Identity(N, M=None, inplace=True, forceflat=None, dtype='float64', name='I')[source]¶
Identity operator.
Simply move model to data in forward model and viceversa in adjoint mode if \(M = N\). If \(M > N\) removes last \(M - N\) elements from model in forward and pads with \(0\) in adjoint. If \(N > M\) removes last \(N - M\) elements from data in adjoint and pads with \(0\) in forward.
Note that the identity operator can handle both 1d and nd arrays; in the case of nd arrays, all elements of N must be larger or equal than those of M (or all elements of M must be larger or equal than those of N).
- Parameters:
- N
intortuple Number of samples in data (and model, if
Mis not provided). If a tuple is provided, this is interpreted as the data (and model) are nd-arrays.- M
intortuple, optional Number of samples in model. If a tuple is provided, this is interpreted as the model is an nd-array. Note that when M is a tuple, N must be also a tuple with the same number of elements.
- inplace
bool, optional Work inplace (
True) or make a new copy (False). By default, data is a reference to the model (in forward) and model is a reference to the data (in adjoint).- forceflat
bool, optional Added in version 2.2.0.
Force an array to be flattened after matvec and rmatvec. Note that this is only required when N and M are tuples (input and output arrays are nd-arrays).
- dtype
str, optional Type of elements in input array.
- name
str, optional Added in version 2.0.0.
Name of operator (to be used by
pylops.utils.describe.describe)
- N
- Attributes:
- dims
tuple Shape of the array after the adjoint, but before flattening.
For example,
x_reshaped = (Op.H * y.ravel()).reshape(Op.dims).- dimsd
tuple Shape of the array after the forward, but before flattening.
For example,
y_reshaped = (Op * x.ravel()).reshape(Op.dimsd).- mode
str Operation mode:
samefor \(M = N\),modelfor \(N > M, and ``data`\) for \(M > N\).- shape
tuple Operator shape.
- dims
- Raises:
- ValueError
If
Mis a tuple with different number of elements ofNIf
NMare non-identical tuples and some values are largers inNand some inM
- NotImplementedError
If
NorMhave type different from int or tuple/list
Notes
For \(M = N\), an Identity operator simply moves the model \(\mathbf{x}\) to the data \(\mathbf{y}\) in forward mode and viceversa in adjoint mode:
\[y_i = x_i \quad \forall i=1,2,\ldots,N\]or in matrix form:
\[\mathbf{y} = \mathbf{I} \mathbf{x} = \mathbf{x}\]and
\[\mathbf{x} = \mathbf{I} \mathbf{y} = \mathbf{y}\]For \(M > N\), the Identity operator takes the first \(M\) elements of the model \(\mathbf{x}\) into the data \(\mathbf{y}\) in forward mode
\[y_i = x_i \quad \forall i=1,2,\ldots,N\]and all the elements of the data \(\mathbf{y}\) into the first \(M\) elements of model in adjoint mode (other elements are
O):\[ \begin{align}\begin{aligned}x_i = y_i \quad \forall i=1,2,\ldots,M\\x_i = 0 \quad \forall i=M+1,\ldots,N\end{aligned}\end{align} \]Methods
__init__(N[, M, inplace, forceflat, dtype, name])adjoint()apply_columns(cols)Apply subset of columns of operator
cond([uselobpcg])Condition number of linear operator.
conj()Complex conjugate operator
div(y[, niter, densesolver])Solve the linear problem \(\mathbf{y}=\mathbf{A}\mathbf{x}\).
dot(x)Matrix-matrix or matrix-vector multiplication.
eigs([neigs, symmetric, niter, uselobpcg])Most significant eigenvalues of linear operator.
matmat(X)Matrix-matrix multiplication.
matvec(x)Matrix-vector multiplication.
reset_count()Reset counters
rmatmat(X)Matrix-matrix multiplication.
rmatvec(x)Adjoint matrix-vector multiplication.
todense([backend])Return dense matrix.
toimag([forw, adj])Imag operator
toreal([forw, adj])Real operator
tosparse()Return sparse matrix.
trace([neval, method, backend])Trace of linear operator.
transpose()