将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