Fortran双精度转换为Python浮点数

1 投票
2 回答
2157 浏览
提问于 2025-04-18 02:46

我在 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或者其他数学库。不过在你的情况下,这些都不是问题。

撰写回答