pylops.HStack

class pylops.HStack(ops, nproc=1, forceflat=None, inoutengine=None, parallel_kind='multiproc', dtype=None)[source]

Horizontal stacking.

Stack a set of N linear operators horizontally. Note that in case one or more operators are filled with zeros, it is recommended to use the pylops.Zero operator instead of e.g., pylops.MatrixMult with a matrix of zeros, as the former will be simply by-passed both in the forward and adjoint steps.

Parameters:
opslist

Linear operators to be stacked. Alternatively, numpy.ndarray or scipy.sparse matrices can be passed in place of one or more operators.

nprocint, optional

Number of processes/threads used to evaluate the N operators in parallel using multiprocessing/concurrent.futures. If nproc=1, work in serial mode.

forceflatbool, optional

Added in version 2.2.0.

Force an array to be flattened after matvec.

inoutenginetuple, optional

Added in version 2.4.0.

Type of output vectors of matvec and rmatvec. If ``None`, this is inferred directly from the input vectors. Note that this is ignored if nproc>1.

parallel_kindstr, optional

Added in version 2.6.0.

Parallelism kind when nproc>1. Can be multiproc (using multiprocessing) or multithread (using concurrent.futures.ThreadPoolExecutor). Defaults to multiproc.

dtypestr, optional

Type of elements in input array.

Attributes:
nopsint

Number of rows of the full operator (rows of each block).

mopsint

Number of columns of the full operator (sum of columns of each block).

mmopsnumpy.ndarray

Cumulative sum of columns of each block, with a leading zero.

dimstuple

Shape of the array after the adjoint, but before flattening.

For example, x_reshaped = (Op.H * y.ravel()).reshape(Op.dims).

dimsdtuple

Shape of the array after the forward, but before flattening.

For example, y_reshaped = (Op * x.ravel()).reshape(Op.dimsd).

poolmultiprocessing.Pool or concurrent.futures.ThreadPoolExecutor or None

Pool of workers used to evaluate the N operators in parallel. When nproc=1, no pool is created (i.e., pool=None).

shapetuple

Operator shape.

Raises:
ValueError

If ops have different number of columns

Notes

An horizontal stack of N linear operators is created such as its application in forward mode leads to

\[\begin{split}\begin{bmatrix} \mathbf{L}_{1} & \mathbf{L}_{2} & \ldots & \mathbf{L}_{N} \end{bmatrix} \begin{bmatrix} \mathbf{x}_{1} \\ \mathbf{x}_{2} \\ \vdots \\ \mathbf{x}_{N} \end{bmatrix} = \mathbf{L}_{1} \mathbf{x}_1 + \mathbf{L}_{2} \mathbf{x}_2 + \ldots + \mathbf{L}_{N} \mathbf{x}_N\end{split}\]

while its application in adjoint mode leads to

\[\begin{split}\begin{bmatrix} \mathbf{L}_{1}^H \\ \mathbf{L}_{2}^H \\ \vdots \\ \mathbf{L}_{N}^H \end{bmatrix} \mathbf{y} = \begin{bmatrix} \mathbf{L}_{1}^H \mathbf{y} \\ \mathbf{L}_{2}^H \mathbf{y} \\ \vdots \\ \mathbf{L}_{N}^H \mathbf{y} \end{bmatrix} = \begin{bmatrix} \mathbf{x}_{1} \\ \mathbf{x}_{2} \\ \vdots \\ \mathbf{x}_{N} \end{bmatrix}\end{split}\]

Methods

__init__(ops[, nproc, forceflat, ...])

adjoint()

apply_columns(cols)

Apply subset of columns of operator

close()

Close the pool of workers used for multiprocessing / multithreading.

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()

Examples using pylops.HStack

Blending

Blending

Describe

Describe

Operators concatenation

Operators concatenation

Operators with Multithreading/Multiprocessing

Operators with Multithreading/Multiprocessing