scipy.linalg.

# null_space#

scipy.linalg.null_space(A, rcond=None)[source]#

Construct an orthonormal basis for the null space of A using SVD

Parameters:
A(M, N) array_like

Input array

rcondfloat, optional

Relative condition number. Singular values `s` smaller than `rcond * max(s)` are considered zero. Default: floating point eps * max(M,N).

Returns:
Z(N, K) ndarray

Orthonormal basis for the null space of A. K = dimension of effective null space, as determined by rcond

`svd`

Singular value decomposition of a matrix

`orth`

Matrix range

Examples

1-D null space:

```>>> import numpy as np
>>> from scipy.linalg import null_space
>>> A = np.array([[1, 1], [1, 1]])
>>> ns = null_space(A)
>>> ns * np.copysign(1, ns[0,0])  # Remove the sign ambiguity of the vector
array([[ 0.70710678],
[-0.70710678]])
```

2-D null space:

```>>> from numpy.random import default_rng
>>> rng = default_rng()
>>> B = rng.random((3, 5))
>>> Z = null_space(B)
>>> Z.shape
(5, 2)
>>> np.allclose(B.dot(Z), 0)
True
```

The basis vectors are orthonormal (up to rounding error):

```>>> Z.T.dot(Z)
array([[  1.00000000e+00,   6.92087741e-17],
[  6.92087741e-17,   1.00000000e+00]])
```