现在我正在尝试将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)
答案 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程序员习惯的那样。