有没有一种简单的方法可以在Fortran中找到索引数组零?

mar*_*rco 5 arrays indexing matlab fortran find

我正在搜索内在的fortran函数来帮助我找到带有零或其他值的数组索引.我只发现了minloc功能,但我认为这不合适.在Fortran中是否有matlab查找函数?

谢谢

Hig*_*ark 8

给定整数数组,例如:

testarr = [0,1,0,2,0,3,0,4]
Run Code Online (Sandbox Code Playgroud)

然后表达

pack([(ix,ix=1,size(testarr))],testarr==0)
Run Code Online (Sandbox Code Playgroud)

将返回元素的索引testarr等于0.

我将让你概括或增强它来处理实数或将其包装成适合你的目的的功能.

Fortran 2008标准增加了一个新的内在函数findloc,它可以替代Matlab的find问题; 我最常用的编译器(Intel Fortran 13.1.1)似乎还没有实现.


mil*_*cic 2

是的,请参阅 High Performance Mark 关于如何使用PACK内在函数执行此操作的答案。

DO如果我需要对满足某些条件的所有数组元素执行操作,我将使用和结构的组合来实现它IF,例如:

INTEGER :: i
REAL,DIMENSION(10) :: a
REAL :: eps = someSmallNumber
...
DO i = 1,SIZE(a)
  IF( 0 > a(i)-eps .AND. 0 < a(i)+eps )THEN
    ...
  ENDIF
ENDDO
Run Code Online (Sandbox Code Playgroud)

上面使用范围(a(i)-eps,a(i)+eps)是为了防止由于浮点运算而导致比较失败。如果使用整数,则==可以进行精确比较。

如果只需要对数组元素进行赋值操作,可以使用WHEREFORALL构造来实现。