qr — Python array API standard 2024.12 documentation (original) (raw)

qr(x: array, /, *, mode: Literal['reduced', 'complete'] = 'reduced') → Tuple[array, array]

Returns the QR decomposition of a full column rank matrix (or a stack of matrices).

If x is real-valued, let \(\mathbb{K}\) be the set of real numbers \(\mathbb{R}\), and, if x is complex-valued, let \(\mathbb{K}\) be the set of complex numbers \(\mathbb{C}\).

The complete QR decomposition of a matrix \(x \in\ \mathbb{K}^{n \times n}\) is defined as

\[x = QR\]

where \(Q \in\ \mathbb{K}^{m \times m}\) is orthogonal when x is real-valued and unitary when x is complex-valued and where \(R \in\ \mathbb{K}^{m \times n}\) is an upper triangular matrix with real diagonal (even when x is complex-valued).

When \(m \gt n\) (tall matrix), as \(R\) is upper triangular, the last \(m - n\) rows are zero. In this case, the last \(m - n\) columns of \(Q\) can be dropped to form the reduced QR decomposition.

\[x = QR\]

where \(Q \in\ \mathbb{K}^{m \times n}\) and \(R \in\ \mathbb{K}^{n \times n}\).

The reduced QR decomposition equals with the complete QR decomposition when \(n \geq m\) (wide matrix).

When x is a stack of matrices, the function must compute the QR decomposition for each matrix in the stack.

Note

Whether an array library explicitly checks whether an input array is a full column rank matrix (or a stack of full column rank matrices) is implementation-defined.

Warning

The elements in the diagonal of \(R\) are not necessarily positive. Accordingly, the returned QR decomposition is only unique up to the sign of the diagonal of \(R\), and different libraries or inputs on different devices may produce different valid decompositions.

Warning

The QR decomposition is only well-defined if the first k = min(m,n) columns of every matrix in x are linearly independent.

Parameters:

Returns:

out (Tuple[array, array]) – a namedtuple (Q, R) whose

Each returned array must have a floating-point data type determined by Type Promotion Rules.

Notes

Changed in version 2022.12: Added complex data type support.