scipy.linalg.

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

Смотрите также

svd

Сингулярное разложение матрицы

orth

Диапазон матрицы

Примеры

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