Калькулятор матрицы найти ранг: Онлайн калькулятор. Ранг матрицы

python — вычислить ранг матрицы, используя scipy

Задавать вопрос

спросил

Изменено 5 лет назад

Просмотрено 40 тысяч раз

Я хотел бы рассчитать математический ранг матрицы с помощью scipy. Самая очевидная функция numpy.rank вычисляет размерность массива (т. е. скаляры имеют размерность 0, векторы 1, матрицы 2 и т. д.). Я знаю, что модуль numpy.linalg.lstsq имеет эту возможность, но мне было интересно, встроена ли такая фундаментальная операция где-нибудь в матричный класс.

Вот явный пример:

 из матрицы импорта numpy, ранг
A = матрица ([[1,3,7],[2,8,3],[7,8,1]])
ранг печати (A)
 

Это дает 2 измерение, где я ищу ответ 3 .

  • питон
  • матрица
  • numpy
  • scipy

3

Numpy предоставляет numpy.linalg.matrix_rank() :

 >>> импортировать numpy
>>> numpy.__version__
«1.5.1»
>>> A = numpy.matrix([[1,3,7],[2,8,3],[7,8,1]])
>>> numpy.linalg.matrix_rank(A)
3
 

1

Предоставить примерный фрагмент кода для людей, которым нужно сделать это на практике. Не стесняйтесь совершенствоваться.

 u, s, v = np.linalg.svd(A)
ранг = np.sum(s > 1e-10)
 

Если numpy не предлагает средства ранга, почему бы вам не написать свой собственный?

Эффективным способом вычисления ранга является разложение по сингулярным значениям — ранг матрицы равен количеству ненулевых сингулярных значений.

 ранг защиты (A, eps=1e-12):
    u, s, vh = numpy.linalg.svd(A)
    return len([x вместо x в s, если abs(x) >
eps])

Обратите внимание, что в вашем приложении eps зависит от — большинство согласится с тем, что 1e-12 соответствует нулю, но вы можете наблюдать числовую нестабильность даже для eps=1e-9.

Используя ваш пример, ответ равен трем. Если вы измените вторую строку на [2, 6, 14] (линейно зависит от первой строки), ответ будет равен двум («нулевое» собственное значение равно 4,9960E-16)

Этот ответ устарел.

Ответ — нет — в настоящее время в scipy нет функции, предназначенной для вычисления матричного ранга массива/матрицы. Добавление одного обсуждалось ранее, но если это произойдет, я не верю, что это еще не произошло.

2

Я не знаю конкретно о Numpy, но вряд ли это встроенная операция над матрицей; он включает в себя довольно интенсивные численные вычисления (и связанные с этим опасения по поводу ошибки округления с плавающей запятой и т. д.) и выбор пороговых значений, которые могут подходить или не подходить в данном контексте, и выбор алгоритма важен для точного и быстрого его вычисления.

Вещи, встроенные в базовые классы, как правило, могут быть выполнены уникальным и простым способом, например, умножение матриц в самых сложных случаях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *