null_space#
- scipy.linalg.null_space(A, rcond=None, *, overwrite_a=False, check_finite=True, lapack_driver='gesdd')[источник]#
Постройте ортонормированный базис для нулевого пространства A с использованием SVD
Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.
- Параметры:
- A(M, N) array_like
Входной массив
- rcondfloat, опционально
Относительное число обусловленности. Сингулярные значения
sменьше чемrcond * max(s)считаются нулевыми. По умолчанию: плавающая точка eps * max(M,N).- overwrite_abool, необязательно
Перезаписывать ли a; может улучшить производительность. По умолчанию False.
- check_finitebool, необязательно
Проверять ли, что входная матрица содержит только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, незавершению) если входные данные содержат бесконечности или NaN.
- lapack_driver{‘gesdd’, ‘gesvd’}, опционально
Использовать ли более эффективный подход «разделяй и властвуй» (
'gesdd') или общий прямоугольный подход ('gesvd') для вычисления SVD. MATLAB и Octave используют'gesvd'подход. По умолчанию'gesdd'.
- Возвращает:
- Z(N, K) ndarray
Ортонормированный базис для нулевого пространства A. K = размерность эффективного нулевого пространства, определяемая rcond
Примеры
1-D нулевое пространство:
>>> 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 нулевое пространство:
>>> 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]])