Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Fortran 77代码转换为Python_Python_Fortran_Fortran77 - Fatal编程技术网

将Fortran 77代码转换为Python

将Fortran 77代码转换为Python,python,fortran,fortran77,Python,Fortran,Fortran77,我已经看过这个Q/A,我几乎已经将下面的Fortran77风格代码转换成了Python3.x,只是我怀疑在Python版本中I=I+1应该放在哪里。正如在链接问题的评论中提到的,我已经做了一致性测试,结果相差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 missin

我已经看过这个Q/A,我几乎已经将下面的Fortran77风格代码转换成了Python3.x,只是我怀疑在Python版本中I=I+1应该放在哪里。正如在链接问题的评论中提到的,我已经做了一致性测试,结果相差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
我假设我们实际上不需要missing的数值。 如果您需要它,您将有如下内容:

try: 
 missing,r[j,0]=[(index,val) for (index,val) in enumerate(u[j]) if val > -9999 ][0]
except:
 missing=-1 

您还可以使用next,它会更快,但处理缺少的条件会更复杂。

Fortran从1开始表示列表,如果您希望它等效,则python为0。最好是调试/打印两个程序上的值。现在只是微调的问题。但我的记忆很模糊。你的fortran程序中有循环吗?是的,但是对于j来说,一个索引的关闭问题可能也存在。我的问题是在你展示的代码中有没有循环?因为一个循环是我在1,5。。。python版本有一个循环,fortran代码似乎没有循环。fortran代码中没有循环。未引用语句500。你说的“含蓄”是什么意思?@ShpielMeister-你完全正确!我做了编辑,没错。使用单个索引,例如u[j]表示整个第j行。