将Fortran 77代码转换为Python

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Fortran 77代码转换为Python相关的知识,希望对你有一定的参考价值。

我查看了这个Q / A Intent of this Fotran77 code,我几乎将下面的Fortran77样式代码转换为Python 3.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版本

  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的主要内容,如果未能解决你的问题,请参考以下文章

将工作代码从双精度转换为四精度:如何从输入文件中读取 FORTRAN 中的四精度数字

在文件上写入编译错误日志 - Fortran 77

编译旧Fortran代码的语法错误

Fortran编程——笔记1

在默认类型和 C 互操作类型之间转换 Fortran 字符和逻辑数组

在默认类型和 C 互操作类型之间转换 Fortran 字符和逻辑数组