fortran和python之间的解释

时间:2015-11-03 06:56:43

标签: python fortran

现在我正在尝试将fortran代码重写为python脚本。

在原始的fortran代码中,它将实数声明为:

real a(n),b(n),D(64)

这里如何在python代码中转换这个D(64)? a(n),b(n)是我使用的数据的值,但D(64)不是。 我需要把它放到我用f2py包装的子模块fortran代码中。 该子模块代码如下所示。 M只是一个将在主代码中定义的整数。

  subroutine multires (a,b,M, D)
  implicit none
  real a(*),b(*),D(*)
        .
        .

  if(nw.gt.1) D(ms+1)=(sumab/nw)

2 个答案:

答案 0 :(得分:4)

如果您的代码正在寻找良好的效果,stay away from python lists。相反,你想使用numpy数组。

import numpy as np
D = np.zeros((64), np.float32)

这将构造一个numpy ndarray,其中64位元素的32位实数初始化为0.使用这些类型的数组而不是列表可以极大地提高python代码在列表上的性能。它们还可以让您更好地控制互操作性的输入,并且您可以减少开销,特别是如果您进入cython。

答案 1 :(得分:2)

Python是动态类型的,因此您不必使用其类型声明变量。 Fortran数组可以在Python列表中进行转换,但由于您不希望动态地将元素添加到列表中,因此应将其初始化为其大小。所以Fortran real D(64)可以成为Python:

D = [ 0. for i in range(64) ]

(声明D为列表并使用64 0.个值进行初始化

当然,如果你可以使用numpy而不仅仅是纯Python,你可以使用numpy.array类型。在其他特性(效率,类型控制......)中,它可以用F(对于Fortran)顺序声明,这意味着第一索引的变化速度最快,就像Fortran程序员习惯的那样。