Spec-Zone.ru › NumPy 1.20

numpy.linalg.matrix_rank

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

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

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

Изменено в версии 1.14: Теперь может работать со стопками матриц

Параметры
M{(M,), (…, M, N)} array_like

Вектор входных данных или стопка матриц.

tol(…) array_like, float, optional

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

Изменено в версии 1.14: Распространяется по стопке матриц

hermitianbool, optional

Если True, предполагается, что M является эрмитовой (симметричной, если вещественнозначной), что позволяет использовать более эффективный метод для нахождения сингулярных значений. По умолчанию False.

Введено в версии 1.14.

Возвращает
rank(…) array_like

Ранг M.

Примечания

Пороговое значение по умолчанию для обнаружения вырожденности ранга — это проверка величины сингулярных значений 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.

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

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

Ссылки

1

Документация MATLAB, «Ранг» https://www.mathworks.com/help/techdoc/ref/rank.html

2

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

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.linalg.matrix_rank.html

Spec-Zone.ru

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