我有一个整数数组。几个值是零,至少有几个大于零。我想在数组中找到第一个和最后一个正值的位置。当然,这可以通过循环来完成。但是,对于现代的Fortran阵列功能,我认为必须有一些更紧凑,更优雅的产品。但是什么都没来。有人知道这样做的好方法吗?
使用Fortran 2008功能findloc
是可能的。
首先,您需要转换值,以便所有正值都具有相同的值(如findloc
找到指定值)。我已经sign
为此使用了,所以所有正值都等于1
。
findloc(data, 1)
返回第一个正值(如果您只有-1,+ 1值),findloc(data, 1, back=.true.)
最后一个。下面的示例程序。
program find_positive
implicit none
integer, allocatable :: data(:)
data = [-3, 3, 0, 2, -3]
write(*,*) data
data = sign(1, data)
write(*,*) data
write(*,*) findloc(data, 1)
write(*,*) findloc(data, 1, back=.true.)
end program find_positive
我已经在Intel Fortran 2018上对此进行了测试。gfortran仅包含了该功能,但我的gfortran(8.2.0)版本尚没有此功能。
PS:不知道您所需要的性能,但是功能存在:-)
编辑:High Performance Mark建议的较短版本
program find_positive
implicit none
integer, allocatable :: data(:)
data = [-3, 3, 0, 2, -3]
write(*,*) data
write(*,*) findloc(sign(1, data), 1)
write(*,*) findloc(sign(1, data), 1, back=.true.)
end program find_positive
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句