scipy.linalg.

null_space#

scipy.linalg.null_space(A, rcond=None, *, overwrite_a=False, check_finite=True, lapack_driver='gesdd')[source]#

使用 SVD 為 A 的零空間建構一個正交基底

參數:
A(M, N) 類陣列

輸入陣列

rcond浮點數,選用

相對條件數。奇異值 s 小於 rcond * max(s) 時會被視為零。預設值:浮點數 eps * max(M,N)。

overwrite_a布林值,選用

是否覆寫 a;可能可以改善效能。預設值為 False。

check_finite布林值,選用

是否檢查輸入矩陣是否僅包含有限數字。停用此功能可能會提升效能,但如果輸入包含無限大或 NaN,可能會導致問題(崩潰、未終止)。

lapack_driver{‘gesdd’, ‘gesvd’},選用

是否使用更有效率的分而治之方法 ('gesdd') 或通用矩形方法 ('gesvd') 來計算 SVD。MATLAB 和 Octave 使用 'gesvd' 方法。預設值為 'gesdd'

回傳值:
Z(N, K) ndarray

A 的零空間的正交基底。K = 有效零空間的維度,由 rcond 決定

另請參閱

svd

矩陣的奇異值分解

orth

矩陣值域

範例

1 維零空間

>>> 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 維零空間

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

基底向量是正交的(在捨入誤差範圍內)

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