Разница псевдообратности между SciPy и Numpy

Я обнаружил, что тамдве версииpinv() функция, которая вычисляет псевдообратную матрицу вScipy а такжеnumpy, документы можно посмотреть по адресу:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.pinv.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.pinv.html

Проблема в том, что у меня матрица 50000 * 5000, при использованииscipy.linalg.pinv, это стоит мне больше, чем 20 ГБ памяти. Но когда я используюnumpy.linalg.pinvтолько менее 1 ГБ памяти используется ..

Мне было интересно почемуnumpy а такжеscipy оба имеютpinv под разной реализацией. И почему их выступления такие разные.

Ответы на вопрос(1)

Решение Вопроса

Я не говорю о том, почему существуют реализации как в scipy, так и в numpy, но я могу объяснить, почему поведение отличается.

numpy.linalg.pinv аппроксимирует обратное псевдо Мура-Пенроуза с использованием SVD (метод Лапакаdgesdd если быть точным), тогда какscipy.linalg.pinv решает модельную линейную систему в смысле наименьших квадратов для аппроксимации псевдообратного (используяdgelss). Вот почему их производительность отличается. Я ожидаю, что общая точность полученных псевдообратных оценок также будет несколько иной.

Вы можете найти этоscipy.linalg.pinv2 выполняет больше похоже наnumpy.linalg.pinv, поскольку он также использует метод SVD, а не приближение наименьшего квадрата.

 Hanfei Sun07 нояб. 2012 г., 09:42
SVD метод иleast square метод, который лучше .. "
 talonmies07 нояб. 2012 г., 09:54
лучше" это очень субъективный термин. Только вы знаете, для чего вам нужен псевдообратный. Предположительно у вас также есть критерии производительности и числовой стабильности ваших алгоритмов. Кто бы это ни быллучше" это тот, который лучше всего соответствует вашим критериям.

Ваш ответ на вопрос