f2py: Обертывание модуля fortran, который использует подпрограммы, распределенные в разных файлах?

По причинам, которые я описалранееМне нужно использовать методы LAPACKs dgesvd и zgesvd в Python вместо тех, что заключены в numpy.

Кто-то указал, что я могу использовать f2py, чтобы создать свой собственный пакет Python. Проблема в том, что dgesdd in lapack вызывает множество других методов, таких как dbdsqr, dgelqf, а также некоторые подпрограммы BLAS, и я не знаю, как мне поступить в этом отношении.

Кто-нибудь может указать, каков будет лучший способ создания модуля Python dgesvd без необходимости перекомпиляции всей библиотеки lapack?

большое спасибо Mischa

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

только те процедуры LAPACK, которые вам нужны. Подпрограммы связаны с вызовами Fortran внизу. Я успешно сделал это с помощью Intel MKL для одного из решателей, похожих на dgesvd (и, очевидно, я не могу перекомпилировать его, поскольку он является закрытым исходным кодом!).

Единственное требование заключается в том, чтобы вы указали путь для ссылки на библиотеку LAPACK (которая в любом случае понадобилась бы для процедуры верхнего уровня):

f2py -L/path/to/lapack -llapack -m module -c module.f

(конечно, замените путь библиотеки и имя библиотеки тем, что применимо на вашем компьютере)

Требуется только обертка вокруг кода в module.f, потому что все вызовы внутри module.f выполняются так, как если бы они были чистыми Fortran.

 Mischa Obrecht27 мая 2012 г., 14:23
звучит здорово, я попробую и вернусь к вам, спасибо !!
 Mischa Obrecht27 мая 2012 г., 16:13
это уже очень помогло, спасибо, у меня все еще есть проблема с получением возвращаемых массивов для единичных векторов. Не могли бы вы взглянуть на мойfollow-up Q , пожалуйста ?

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