Fortran:灵活的数组过滤

1 投票
1 回答
743 浏览
提问于 2025-04-17 10:04

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)。

撰写回答