# scipy.linalg.null_space

scipy.linalg.null_space(A, rcond=None)

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

  Parameters:
    A(M, N) array_like

      Input array

    rcond float, 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

  See also

  `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.sign(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]])