Fortran 相当于 numpy.where() 函数?

rya*_*lon 3 fortran numpy slice

我想在Fortran 中做这样的事情:

program where

real :: a(6) = (/ 4, 5, 6, 7, 8, 9 /)

print *, a(a>7)

end program
Run Code Online (Sandbox Code Playgroud)

Python 中,我通常会像这样使用NumPy 执行此操作:

program where

real :: a(6) = (/ 4, 5, 6, 7, 8, 9 /)

print *, a(a>7)

end program
Run Code Online (Sandbox Code Playgroud)

我玩过,但到目前为止没有任何效果,但我猜这很简单。

fra*_*lus 5

我会稍微扩展@VladimirF 的答案,因为我怀疑您不想将自己限制在确切的打印示例中。

a>7返回一个logical对应于阵列a.true.在其中满足条件索引,.false.否则。的pack固有采取这样的掩模,并返回与这些元件的阵列与.true.在掩模。

但是,您可以使用面具做其他事情,这可能符合您的numpy.where愿望。例如,有where构造(和where语句)和merge内在的。此外,您可以pack再次使用掩码来获取索引并进行更多涉及的操作。