问题描述
我想使用Fortran90代码和LAPACK库对矩阵求逆,并使其能够在使用f2py的Python中使用。这是我想用f2py在Python中实现的子例程:
subroutine inv(A,Ainv)
implicit none
real(kind=8),dimension(:,:),intent(in) :: A
real(kind=8),dimension(size(A,1),size(A,2)),intent(out) :: Ainv
real(kind=8),1)) :: work ! work array for LAPACK
integer,1)) :: ipiv ! pivot indices
integer :: n,info
! External procedures defined in LAPACK
external DGETRF
external DGETRI
! Store A in Ainv to prevent it from being overwritten by LAPACK
Ainv = A
n = size(A,1)
! DGETRF computes an LU factorization of a general M-by-N matrix A
! using partial pivoting with row interchanges.
call DGETRF(n,n,Ainv,ipiv,info)
if (info /= 0) then
stop 'Matrix is numerically singular!'
end if
! DGETRI computes the inverse of a matrix using the LU factorization
! computed by DGETRF.
call DGETRI(n,work,info)
if (info /= 0) then
stop 'Matrix inversion Failed!'
end if
end subroutine inv
当我在fortran程序中编译并运行它时,此代码有效。
然后,要使用f2py进行编译,请使用以下命令:
f2py -c inverse.f90 -m inverse --fcompiler=gnu95 --compiler=mingw32 -L. -lliblapack
它会编译并创建模块inverse.cp38-win_amd64.pyd
,通常我应该能够在Python shell中将其导入,但是出现以下错误:
>>> import inverse
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
ImportError: DLL load Failed while importing inverse: the specified module is not found.
我认为DLL文件是使用的LAPACK库,所以我想知道是否有一种方法可以将LAPACK库与不同于-L/path/to/library and -l<library.dll>
的f2py链接起来
我使用的gfortran编译器与MinGW 64位一起使用,我的python版本是3.8.5和64位,我的LAPACK库也是64位的预构建库,并且我在Windows 10上。
谢谢您的帮助!
Dorian
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)