Я использую numpy.svd для вычисления разностных разложений сильно обусловленных матриц. Для некоторых особых случаев svd не будет сходиться и поднять Linalg.Error. Я провел некоторое исследование и обнаружил, что numpy использует процедуру DGESDD из LAPACK. Стандартная реализация имеет жесткий итерационный предел в 35 или что-то итерации. Если я попытаюсь разложить одну и ту же матрицу в Matlab, все будет хорошо, и я думаю, что для этого есть две причины: 1. Matlab использует DGESVD вместо DGESDD, который в целом кажется более надежным. 2. Matlab использует ограничение итерации 75 в рутине. (Они изменили его в источнике и перекомпилировали его.)Использование альтернативного драйвера LAPACK в svd-методе numpy?
Теперь возникает вопрос: существует ли простой способ изменить используемый бэкэнд в numpy от DGESDD до DGESVD без необходимости изменения источника numpy?
Заранее спасибо Мишей
Это весьма маловероятно, но вы могли бы напишите свой собственный модуль f2py, вызывающий DGESVD. –
Я надеялся избежать этого, но, похоже, мне все равно придется это делать ... –