给定整数数组,例如:
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)似乎还没有实现.
是的,请参阅 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)是为了防止由于浮点运算而导致比较失败。如果使用整数,则==可以进行精确比较。
如果只需要对数组元素进行赋值操作,可以使用WHERE或FORALL构造来实现。
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |