【发布时间】:2011-11-25 02:36:03
【问题描述】:
在 Python 中:
def select(x):
y = []
for e in x:
if e!=0:
y.append(e)
return y
它的作用是:
x = [1,0,2,0,0,3] 选择(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
对于 1,如果它被定义为 y(n),输出将是:
x = (/1,0,2,0,0,3/) 打印*,选择(x,6) 1,2,3,0,0,0这是不想要的!
!--------------------------------
评论:
1- 所有给出的答案在这篇文章中都很有用。特别是 M.S.B 和 eryksun 的。
2- 我尝试针对我的问题调整这些想法并使用 F2Py 进行编译,但没有成功。我已经使用 GFortran 对它们进行了调试,并且一切都成功了。这可能是F2Py 中的一个错误,或者我不知道如何正确使用它。我将尝试在另一篇文章中讨论这个问题。
更新: 可以在here 找到相关问题。
【问题讨论】:
-
您是如何将自己从 Python 反向移植到 Fortran 的? o_O 这似乎很不寻常。还是您只是将 Fortran 作为一项学术练习来学习?
-
一般声明:不是唯一的原因,但至少出于性能考虑,我总是必须考虑将一些代码翻译成 Fortran,然后在 Python 中调用它们(通过 F2Py)。到目前为止,这对我来说是最好的匹配,同时具有质量和生产力 (Python) 以及速度和性能 (Fortran)。
标签: python arrays fortran dynamic-arrays