将Fortran 77代码转换为Python

我已经看过这个Q/A Intent of this Fotran77 code,我几乎已经将下面的Fortran77样式代码转换为Python 3.x,除非我怀疑i = i + 1应该放在Python版本。正如我在相关问题的评论中所提到的,我已经完成了一致性测试,结果的偏差为2.因此,这个问题。将Fortran 77代码转换为Python

i = 0 

500 continue

i = i +1

if (i .le. ni) then

if (u(i,j-1) .gt. -9999.) then

r(1,j) = u(i,j-1)

go to 600

else

missing = i

go to 500

end if

end if

600 continue

这里是我的Python版本

i = 0 

while (i <= ni):

i = i+1

if (u[i,j-1] > -9999.0):

r[0,j] = u[i,j-1]

break

else:

missing = i

难道我在放在正确的位置增量计数器?

回答:

不建议直接翻译,因为你失去了一些python的高效编码特性。

要在python中正确地做到这一点,您应该1)认识python的0-索引约定,2)认识到fortran是列主要的,python是主要行,所以您应该颠倒所有多维阵列。

如果你这样做循环可以写成:

try: 

r[j,0]=[val for val in u[j] if val > -9999 ][0]

missing=False

except:

missing=True

我假设,我们实际上并不需要缺失的数值。 如果你需要它,你就会有这样的事情:

try: 

missing,r[j,0]=[(index,val) for (index,val) in enumerate(u[j]) if val > -9999 ][0]

except:

missing=-1

你也可以使用next这将是快,但它变得有点棘手处理丢失情况。

以上是 将Fortran 77代码转换为Python 的全部内容, 来源链接: utcz.com/qa/261746.html

回到顶部