在Python中:
def select(x):
y = []
for e in x:
if e!=0:
y.append(e)
return y
这将作为:
x = [1,0,2,0,0,3] call select(x) ! x 现在为 [1,2,3]
翻译成 Fortran。
function select(x,n) result(y)
implicit none
integer:: x(n),n,i,j,y(?)
j = 0
do i=1,n
if (x(i)/=0) then
j = j+1
y(j) = x(i)
endif
enddo
end function
这些问题是关于Fortran的:
- 如何声明y(?)?
- 如何为x定义预设值?
- 如何避免使用维度信息n?
对于第一个问题,如果它被定义为 y(n),输出将会是:
x = (/1,0,2,0,0,3/) print *,select(x,6) 1,2,3,0,0,0
这不是我们想要的结果!
!-------------------------------
注释:
1- 这篇帖子中提供的所有答案都很有用。特别是M.S.B和eryksun's的。
2- 我尝试为我的问题适应这些想法并使用F2Py
编译,但是不成功。我已经使用GFortran进行了调试,并且全部都成功了。这可能是F2Py
中的一个错误或者是我不知道如何正确使用它的原因。我将在另一篇帖子中尝试解决这个问题。
更新: 相关问题可以在这里找到。