Spec-Zone.ru › NumPy 2.0

numpy.linalg.matrix_rank

linalg.matrix_rank(A, tol=None, hermitian=False, *, rtol=None)[source]

Возвращает ранг матрицы массива с помощью метода SVD

Ранг массива — это количество сингулярных значений массива, которые больше tol.

Изменено в версии 1.14: Теперь может работать со стеками матриц

Параметры:
A{(M,), (…, M, N)} array_like

Вектор входных данных или стек матриц.

tol(…) array_like, float, необязательно

Порог, ниже которого значения SVD считаются нулевыми. Если tol равно None, и S — массив с сингулярными значениями для M, и eps — значение epsilon для типа данных S, то tol устанавливается в S.max() * max(M, N) * eps.

Изменено в версии 1.14: Вещание против стека матриц

hermitianbool, необязательно

Если True, A предполагается эрмитовой (симметричной, если вещественной), что позволяет использовать более эффективный метод для поиска сингулярных значений. По умолчанию False.

Введено в версии 1.14.

rtol(…) array_like, float, необязательно

Параметр для компонента относительной погрешности. Только tol или rtol могут быть установлены одновременно. По умолчанию max(M, N) * eps.

Введено в версии 2.0.0.

Возвращает:
rank(…) array_like

Ранг A.

Примечания

Пороговое значение по умолчанию для обнаружения недостаточности ранга — это проверка величины сингулярных значений A. По умолчанию мы идентифицируем сингулярные значения, меньшие S.max() * max(M, N) * eps, как указывающие на недостаточность ранга (при указанных выше обозначениях). Это алгоритм, используемый MATLAB [1]. Он также появляется в «Численных рецептах» в обсуждении решений SVD для линейных наименьших квадратов [2].

Это пороговое значение по умолчанию разработано для обнаружения недостаточности ранга с учетом численных ошибок вычисления SVD. Представьте, что столбец в A является точным (в формате с плавающей точкой) линейным сочетанием других столбцов в A. Вычисление SVD для A в общем случае не даст сингулярного значения, точно равного 0: любое отличие наименьшего значения SVD от 0 будет вызвано числовой неточностью при вычислении SVD. Наш порог для малых значений SVD учитывает эту числовую неточность, и пороговое значение по умолчанию обнаружит такую числовую недостаточность ранга. Порог может объявить матрицу A недостаточной по рангу, даже если линейное сочетание некоторых столбцов A не точно равно другому столбцу A, а только численно очень близко к другому столбцу A.

Мы выбрали наш порог по умолчанию, потому что он широко используется. Другие пороги тоже возможны. Например, в другом месте в издании «Численных рецептов» 2007 года есть альтернативный порог S.max() * np.finfo(A.dtype).eps / 2. * np.sqrt(m + n + 1.). Авторы описывают этот порог как основанный на «ожидаемой ошибке округления» (стр. 71).

Вышеуказанные пороги связаны с ошибкой округления с плавающей точкой при вычислении SVD. Однако у вас может быть больше информации о источниках ошибок в A, которые позволили бы вам рассмотреть другие значения порога для обнаружения эффективной недостаточности ранга. Самая полезная мера толерантности зависит от операций, которые вы планируете выполнять над вашей матрицей. Например, если ваши данные поступают от неопределенных измерений с неопределённостями, большими, чем epsilon с плавающей точкой, выбор порога, близкого к этой неопределённости, может быть предпочтительнее. Порог может быть абсолютным, если неопределённости являются абсолютными, а не относительными.

Ссылки

[1]

Документация MATLAB, «Ранг» https://www.mathworks.com/help/techdoc/ref/rank.html

[2]

W. H. Press, S. A. Teukolsky, W. T. Vetterling и B. P. Flannery, «Численные рецепты (3-е издание)», Cambridge University Press, 2007, страница 795.

Примеры

>>> from numpy.linalg import matrix_rank
>>> matrix_rank(np.eye(4)) # Full rank matrix
4
>>> I=np.eye(4); I[-1,-1] = 0. # rank deficient matrix
>>> matrix_rank(I)
3
>>> matrix_rank(np.ones((4,))) # 1 dimension - rank 1 unless all 0
1
>>> matrix_rank(np.zeros((4,)))
0

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.linalg.matrix_rank.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API