numpy.linalg.matrix_rank
-
numpy.linalg.matrix_rank(M, tol=None)[source] -
Возвращение ранга матрицы массива с использованием метода SVD
Ранг массива — это количество сингулярных значений SVD массива, которые больше, чем
tol.Параметры: M : {(M,), (M, N)} array_like
массив с <=2 измерениями
tol : {None, float}, необязательно
порог, ниже которого значения SVD считаются нулевыми. Если
tolравно None, иS— массив с сингулярными значениями дляM, иeps— значение epsilon для типа данныхS, тогдаtolустанавливается вS.max() * max(M.shape) * eps.Примечания
Пороговое значение по умолчанию для обнаружения недостаточности ранга — это тест на величину сингулярных значений
M. По умолчанию мы определяем сингулярные значения, меньшиеS.max() * max(M.shape) * eps, как указывающие на недостаточность ранга (при заданных выше обозначениях). Это алгоритм, используемый MATLAB [1]. Он также присутствует в Числовых рецептах в обсуждении решений SVD для линейных наименьших квадратов [2].Это пороговое значение по умолчанию предназначено для обнаружения недостаточности ранга, учитывая числовые ошибки вычисления SVD. Представьте, что в
Mесть столбец, являющийся точной (в формате с плавающей запятой) линейной комбинацией других столбцов вM. Вычисление SVD дляMобычно не приведет к точному сингулярному значению, равному 0: любое различие наименьшего значения SVD от 0 будет вызвано числовой неточностью при вычислении SVD. Наш порог для малых значений SVD учитывает эту числовую неточность, и пороговое значение по умолчанию обнаружит такую числовую недостаточность ранга. Порог может объявить матрицуMнедостаточной по рангу, даже если линейная комбинация некоторых столбцовMне равна точно другому столбцуM, а только численно очень близка к другому столбцуM.Мы выбрали наше пороговое значение по умолчанию, потому что оно широко используется. Другие пороги возможны. Например, в другом месте в издании Числовых рецептов 2007 года есть альтернативный порог
S.max() * np.finfo(M.dtype).eps / 2. * np.sqrt(m + n + 1.). Авторы описывают этот порог как основанный на «ожидаемой ошибке округления» (стр. 71).Пороговые значения выше связаны с ошибками округления с плавающей запятой при вычислении SVD. Однако у вас может быть больше информации о источниках ошибок в
M, что заставило бы вас рассмотреть другие значения допуска для обнаружения эффективной недостаточности ранга. Наиболее полезная мера допуска зависит от операций, которые вы намерены использовать над вашей матрицей. Например, если ваши данные получены из неопределенных измерений с неопределенностями, превышающими epsilon с плавающей запятой, выбор допуска, близкого к этой неопределенности, может быть предпочтительнее. Допуск может быть абсолютным, если неопределенности являются абсолютными, а не относительными.Ссылки
[R39] Документация MATLAB, «Ранг» http://www.mathworks.com/help/techdoc/ref/rank.html [R40] 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
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.matrix_rank.html