将Fortran 77代码转换为Python

2024-09-28 20:55:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看过这个Q/AIntent of this Fotran77 code,我几乎把下面的Fortran77风格的代码转换成python3.x,但我有一个疑问,I=I+1应该放在Python版本的哪个位置。正如在相关问题的评论中提到的,我已经做了一致性测试,结果相差2分。这就是问题所在。在

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版本

^{pr2}$

我把递增计数器放在正确的位置了吗?在


Tags: ofto代码版本goif风格code
1条回答
网友
1楼 · 发布于 2024-09-28 20:55:20

不建议直接翻译,因为您丢失了python的许多高效编码特性。在

要在python中正确地实现这一点,您应该1)认识到python的0-index约定,2)认识到fortran是column major,python是row major,因此应该颠倒所有多维数组的索引顺序。在

如果您这样做,可以写入循环:

try: 
 r[j,0]=[val for val in u[j] if val > -9999 ][0]
 missing=False
except:
 missing=True

我假设我们不需要missing的数值。 如果你需要它,你会得到这样的东西:

^{pr2}$

您也可以使用next,这会更快,但是处理丢失的条件会变得更棘手。在

相关问题 更多 >