• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

将Fortran 77代码转换为Python

python 来源:gansub 4次浏览

我已经看过这个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这将是快,但它变得有点棘手处理丢失情况。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)