вызывать драйверы/функции LAPACK из python

Мне нужно использовать функцию lapack «DGGLSE» в python, чтобы решить задачу наименьших квадратов с ограничениями.

Я обнаружил, что некоторые низкоуровневые функции lapack можно найти в scipy следующим образом: http://docs.scipy.org/doc/scipy/reference/linalg.lapack.html но тот, который меня интересует, не был включен, и кажется, что большинство кодов драйверов lapack все равно не включены.

Интересно, есть ли способ, которым я могу это сделать. Спасибо. -Ян


person ywang    schedule 12.08.2013    source источник
comment
посмотрите этот ответ, где объясняется, как обернуть DGEMM с помощью Cython, вы, вероятно, можете применить аналогичный подход к используйте DDGLSE...   -  person Saullo G. P. Castro    schedule 13.08.2013


Ответы (2)


У меня небольшой опыт работы с Fortran, но, насколько я понимаю, стандартный способ обернуть функции LAPACK, которые еще не включены в SciPy, — это использовать инструмент f2py, включенный в NumPy. Некоторые основные инструкции можно найти по адресу http://wiki.scipy.org/Cookbook/F2Py#head-9c22e0d6fa6b16650feea2c271233a8c47e8d051

Вы также можете обернуть его через Cython. Делая это таким образом, вы компилируете файл Fortran и связываете его, как показано на странице http://fortran90.org/src/best-practices.html#interfacing-with-python Там описывается, как использовать Cython или ctypes для переноса подпрограммы Fortran. Этот конкретный пример доступен в Интернете по адресу https://github.com/certik/fortran90_question/tree/master/fcython_mesh Убедитесь, что вы обращаете внимание на то, как ваш массив расположен в памяти (непрерывный C или Fortran-непрерывный).

person IanH    schedule 13.08.2013

Семейство подпрограмм ?GGLSE включено в SciPy версии 1.0. Вы можете сначала вызвать ?gglse_lwork, чтобы получить оптимальный размер блока на вашем оборудовании, а затем использовать его в качестве аргумента для ?gglse.

Вы можете проверить подпись на консоли ipython через

scipy.linalg.lapack.dgglse?

или с помощью помощи и так далее.

person percusse    schedule 18.01.2018