Fortran:灵活的阵列过滤

时间:2012-01-12 04:27:42

标签: python arrays numpy fortran mask

Fortran 中我们编码如下:

!vectors w,q are of the same size
...
w = ...         !a vector of integers [0,...,n)
if (allocated(t)) deallocate(t);
allocate(t(count(w/=0)))
t = pack(q, w/=0)
m = count(t>0)
if (allocated(b)) deallocate(b)
allocate(b(m))
b = pack(t,t>0)

翻译 Python 中的代码:

t = q[w!=0]
b = t[t>0]

不确定我们所做的Fortran实现是否正确。请注意,它是一个非常大的程序的一部分,我们得到一些恼人的运行时错误,有时甚至没有消息,但崩溃......

1 个答案:

答案 0 :(得分:2)

在F2003中,将t和b声明为可分配的向量并简单地写:

t = pack(q, w/=0)
b = pack(t,t>0)

这已得到iffort的gfortran(GCC 4.6)等几个编译器的支持(英特尔编译器套件> 11.x)