gpt4 book ai didi

fortran - 将 WHERE 中的掩码应用于更高维度的数组

转载 作者:行者123 更新时间:2023-12-04 08:59:46 29 4
gpt4 key购买 nike

我想将 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

关于fortran - 将 WHERE 中的掩码应用于更高维度的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63619024/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com