Spec-Zone.ru › NumPy 1.19

numpy.linalg.matrix_rank

numpy.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]. Он также встречается в «Численных рецептах» в обсуждении решений 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 с плавающей точкой, выбор толерантности вблизи этой неопределенности может быть предпочтительнее. Толерантность может быть абсолютной, если неопределенности абсолютные, а не относительные.

Ссылки

1

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

2

У. Х. Пресс, С. А. Теукольский, У. Т. Ветерлинг и Б. П. Фланнери, «Численные рецепты (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

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

Spec-Zone.ru

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