Spec-Zone.ru › NumPy 1.13

numpy.linalg.matrix_rank

numpy.linalg.matrix_rank(M, tol=None) [source]

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

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

Параметры:

M : {(M,), (..., M, N)} array_like

входной вектор или набор матриц

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 обычно не даст сингулярное значение, равное точно нулю: любая разница наименьшего значения 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 , что заставило бы вас рассмотреть другие значения толерантности для обнаружения эффективного недостатка ранга. Наиболее полезная мера толерантности зависит от операций, которые вы планируете использовать для вашей матрицы. Например, если ваши данные получены из неопределённых измерений с погрешностями, превышающими погрешность с плавающей точкой, предпочтительно выбрать толерантность, близкую к этой неопределённости. Толерантность может быть абсолютной, если погрешности абсолютные, а не относительные.

Ссылки

[R42] Документация MATLAB, «Ранг» http://www.mathworks.com/help/techdoc/ref/rank.html
[R43] W. H. Press, S. A. Teukolsky, W. T. Vetterling и B. P. Flannery, «Численные рецепты (3-е издание)», Издательство Кембриджского университета, 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–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.matrix_rank.html

Spec-Zone.ru

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