Spec-Zone.ru › NumPy 1.12

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}, optional

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

Примечания

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

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

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

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

Ссылки

[R39] Документация MATLAB, «Ранг» http://www.mathworks.com/help/techdoc/ref/rank.html
[R40] W. H. Press, S. A. Teukolsky, W. T. Vetterling и B. P. Flannery, «Numerical Recipes (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–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.linalg.matrix_rank.html

Spec-Zone.ru

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