Если numpy
не предлагает услуги ранга, почему бы вам не написать свою собственную?
Эффективным способом вычисления ранга является разложение по сингулярному значению - ранг матрицы равен числу ненулевых сингулярных значений.
def rank(A, eps=1e-12):
u, s, vh = numpy.linalg.svd(A)
return len([x for x in s if abs(x) > eps])
Обратите внимание, что eps
зависит от вашего приложения - большинство согласится с тем, что 1e-12 соответствует нулю, но вы можете быть свидетелями численной нестабильности даже для eps = 1e-9.
Используя ваш пример, ответ три. Если вы измените вторую строку на [2, 6, 14]
(линейно зависит от первой строки), ответ будет два ("нулевое" собственное значение - 4.9960E-16)