我想将WHERE构造的结果应用于具有更高维度的其他数组,以便在下面的“-”标记来自WHERE的索引。我想知道FINDLOC是否可以提供帮助,但似乎不能使用逻辑表达式。我是否不知道有某种ARGWHERE内在函数可以返回索引并应用它们?
PROGRAM test
REAL :: a(3,20,20),b(20,20),c(20,20)
CALL random_number(c)
a=1
b=1
WHERE (c<0.5)
c=0
b=0 ! this is fine
a(:,-,-)=0 ! how to do this???
ENDWHERE
END PROGRAM test
对于b
与大小相同的数组,c
也许使用MERGE
会更优雅:
b = MERGE(1,0,c>=0.5)
使用a
,可以用一种不太优雅但仍然紧凑的方式进行相同的操作:
FORALL(i=1:20,j=1:20) a(:,i,j) = merge(1,0,c(i,j)>=0.5)
这两个命令都将提供阵列中所有元素的关联。如果只希望进行过滤操作,而与数组中的初始值无关,则可以将它们简化为一个WHERE
构造:
FORALL(i=1:20,j=1:20,c(i,j)<0.5) a(:,i,j) = 0.0
WHERE (c<0.5)
b=0.0
c=0.0
END WHERE
***编辑***根据@HighPerformanceMark的建议,后一个示例可以打包为
FORALL (i=1:20,j=1:20,c(i,j)<0.5)
a(:,i,j) = 0.0
b (i,j) = 0.0
c (i,j) = 0.0
END FORALL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句