Spec-Zone.ru › NumPy 1.14

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 — значение эпсилон для типа данных S, тогда tol устанавливается в S.max() * max(M.shape) * eps.

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

hermitian : bool, optional

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

Добавлена в версии 1.14.

Примечания

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

Ссылки

[R44] Документация MATLAB, «Ранг» http://www.mathworks.com/help/techdoc/ref/rank.html
[R45] 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

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

Spec-Zone.ru

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