Fortran:灵活的数组过滤
在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 个回答
2
在F2003中,可以把t和b声明为可分配的向量,然后简单地写成:
t = pack(q, w/=0)
b = pack(t,t>0)
这个功能已经被一些编译器支持,比如gfortran(GCC 4.6)和ifort(英特尔编译器套件版本大于11.x)。