从Fortran数组中删除特定元素

gpp*_*ypy 1 arrays fortran elements

Fortran中是否有一个删除数组中特定元素的函数,这样删除时的数组会缩短删除的元素数量?

背景:我目前正在开展一个项目,其中包含一组人口,并对个人进行相应的描述(即年龄,死亡年龄等).

我使用的方法是遍历数组,找到我需要的元素,将它放在另一个数组中,然后释放前一个数组,在下一个时间步之前,在遍历子程序之前将这个数组移回数组再一次不需要的元素.

Ian*_*anH 6

您可以使用PACK内部函数和内部赋值来创建一个数组值,该值由另一个数组中的选定元素组成.假设array是可分配的,并且要删除的元素由逻辑掩码提名,逻辑掩码logical_mask与原始值相同array:

array = PACK(array, .NOT. logical_mask)
Run Code Online (Sandbox Code Playgroud)

由其索引指定的单个元素的简洁语法是:

array = [array(:index-1), array(index+1:)]
Run Code Online (Sandbox Code Playgroud)

根据您的Fortran处理器,上述语句可能会导致编译器创建可能影响性能的临时值.如果这有问题,那么您将需要使用您描述的子程序方法.

  • 如果 `array` 的索引不是从 1 开始,这种形式就会很尴尬。 (2认同)