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