在 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实现是否正确。请注意,它是一个非常大的程序的一部分,我们得到一些恼人的运行时错误,有时甚至没有消息,但崩溃......
答案 0 :(得分:2)
在F2003中,将t和b声明为可分配的向量并简单地写:
t = pack(q, w/=0)
b = pack(t,t>0)
这已得到iffort的gfortran(GCC 4.6)等几个编译器的支持(英特尔编译器套件> 11.x)