python - 将 Fortran 77 代码转换为 Python

标签 python fortran fortran77

我看过这个问答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 ,这会更快,但处理缺失的条件会有点棘手。

关于python - 将 Fortran 77 代码转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864617/

相关文章:

c - 从 FORTRAN 90 调用 C 例程的不同数字参数

fortran - 如果不支持 iso_fortran_env,现代 Fortran 中应该使用什么来指定 8 字节实数变量?

linux - f77 中多个无法识别的选项

Fortran 'call' 语句 : what can it actually call?

python - 想要在独特的上下文中为矩阵的每个元素添加特定值

python - 在 Python 中读/写 MS Word 文件

pointers - 在子例程中分配数组并将其传回时,FORTRAN 中的内存泄漏问题

系统中精度最高的Fortran格式语句

python - 无法在Python 3.9上使用pip安装Open CV

python - 我们可以在函数映射需要超过 1 个参数的地方应用 pandas.map() 吗?