Fortran双精度转换为Python浮点数
我在 generation.f90
文件里有一个子程序。
SUBROUTINE generation(t, prob)
IMPLICIT NONE
INTEGER, INTENT(IN) :: t
REAL(8), INTENT(OUT) :: prob
INTEGER :: nT2, c
Do some stuff with t, nT2 and c
prob = nT2/(DBLE(1.0)*c)
END SUBROUTINE generation
我想在 Python 中使用它,所以我用 f2py
把它封装了一下。
我运行了这个命令:f2py -c -m generation generation.f90 --fcompiler=gnu95
然后在 ipython
中我执行了:
from generation import *
a = generation(10000); type(a)
结果我得到了 float
。我查看了用这个命令生成的 C 文件 testmodule.c
:
f2py generation.f90 -m test
发现 prob
的类型是 double
。我希望 type(a)
能变成 numpy.float64
。我该怎么做呢?我对 Fortran 和 f2py 还不太熟悉。
2 个回答
2
正如其他回答提到的,Python中的float
类型本身就是一种双精度数字。
不过,如果你想要进行转换,可以使用
import numpy as np
a = np.float64(a)
想了解更多关于转换的细节,可以查看numpy的文档。
1
在Python中,浮点数默认是双精度的。要得到单精度的浮点数就比较麻烦,需要用到numpy或者其他数学库。不过在你的情况下,这些都不是问题。