使用 f2py 时出现问题
我有一些用 Fortran 编写的例程,我想在我的 python 代码中使用它们。快速的网络搜索告诉我有关 f2py 的信息,我尝试了一下。使用
f2py -c numericalMethods.f -m numericalMethods
它似乎可以工作一段时间,直到在转换过程中产生很多错误。知道为什么以下代码无法与 f2py 一起使用吗?
SUBROUTINE n_bezier(t, nx2, BezX, BezY)
PARAMETER (N_SEG=130)
PARAMETER (nmax=130)
DOUBLE PRECISION t(nmax)
DOUBLE PRECISION nx2(nmax)
DOUBLE PRECISION BezX(N_SEG), BezY(N_SEG)
DOUBLE PRECISION coeff(nmax)
INTEGER i, j
DOUBLE PRECISION r,fact
do i = 1, N_SEG
r = real(i) / real(N_SEG)
BezX(i) = 0
BezY(i) = 0
do j=1,nmax
coeff(j) = BICO(nmax,j) *
. (1-r)**(nmax-j) * r**j
print*, 'coeff for j= ', j, ' --> ', coeff(j)
if(coeff(j).ne.0) then
BezX(i) = BezX(i) + coeff(j)*t(j)
BezY(i) = BezY(i) + coeff(j)*nx2(j)
endif
enddo
enddo
END
function fact(n)
INTEGER n, p
DOUBLE PRECISION fact
p = 1
do i = 1, n
p = p * i
end do
fact = p
end
FUNCTION BICO(N,K)
BICO=ANINT(EXP(FACTLN(N)-FACTLN(K)-FACTLN(N-K)))
RETURN
END
FUNCTION FACTLN(N)
DIMENSION A(100)
DATA A/100*-1./
IF (N.LT.0) PAUSE 'negative factorial'
IF (N.LE.99) THEN
IF (A(N+1).LT.0.) A(N+1)=GAMMLN(N+1.)
FACTLN=A(N+1)
ELSE
FACTLN=GAMMLN(N+1.)
ENDIF
RETURN
END
FUNCTION GAMMLN(XX)
REAL*8 COF(6),STP,HALF,ONE,FPF,X,TMP,SER
DATA COF,STP/76.18009173D0,-86.50532033D0,24.01409822D0,
. -1.231739516D0,.120858003D-2,-.536382D-5,2.50662827465D0/
DATA HALF,ONE,FPF/0.5D0,1.0D0,5.5D0/
X=XX-ONE
TMP=X+FPF
TMP=(X+HALF)*LOG(TMP)-TMP
SER=ONE
DO 11 J=1,6
X=X+ONE
SER=SER+COF(J)/X
11 CONTINUE
GAMMLN=TMP+LOG(STP*SER)
RETURN
END
编辑:这里是包含错误的日志文件。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将我最终解决问题的评论放入答案中:
遵循在网上找到的一些建议 https://cd34.com/blog/programming/python/mysql-python-and-snow-leopard -->评论37,我将10.4文件夹替换为10.5 SDK文件夹。
stdarg.h
错误不再存在。不是很干净和正统,但似乎有效。 .so 文件现已创建!感谢大家的帮助。Putting my comment that finally solved the problem into an answer :
Following some advice found on the net https://cd34.com/blog/programming/python/mysql-python-and-snow-leopard --> comment 37, I replaced the 10.4 folder by the 10.5 SDK one. And the
stdarg.h
error is no more. Not very clean and orthodox, but it seems to work. The .so file is created now! Thanks for everyone's help.