Spec-Zone.ru › NumPy 1.10

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

Spec-Zone.ru

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