next up previous
Next: SUM(array,[dim],mask)/SIZE(array,[dim])/COUNT([dim],mask) Up: 函数/FORTRAN表現早見表 Previous: PACK(array,mask,[vector])

MINLOC/MAXLOC(array,[dim],mask)

minlocは、整数/実数配列の要素のうち、最小の値を持つ位置の配列。
maxlocは、整数/実数配列の要素のうち、最大の値を持つ位置の配列。


\begin{lstlisting}
integer(4) :: m(2,2) = reshape( (/ 3, 4, 2, 8 /), (/ 2, 2 /)...
...! 3 4 2 8
print *, minloc(m) !! 1 2
print *, maxloc(m) !! 2 2
\end{lstlisting}
   

maskをかけるとmaskの条件を満たすもののうち、最小/最大の値を持つ位置を返 す。条件を満たすものが1つもない場合は0(処理系によっては1)を返す(ので、条 件を満たさないような場合を利用するプログラムは書かない; any/allを使って はじめにそのような場合を排除しておく)。

等価なFortran77表現。
\begin{lstlisting}
integer(4) :: m(2,2) = reshape( (/ 3, 4, 2, 8 /), (/ 2, 2 /)...
...loc(1) = i
maxloc(2) = j
l = m(i,j)
end if
end do
end do
\end{lstlisting}

Fortran95仕様では、次元を指定すると次のような意味になる。
\begin{lstlisting}
print *, minloc(m,dim=1) !! 1 1 equiv to below expr
print *, minloc(m(1:2,1)), minloc(m(1:2,2))
\end{lstlisting}

1次元配列にdim=1を明示すると、整数値として取扱うことが出来る。
\begin{lstlisting}
integer(4) :: m(4) = (/ 3, 4, 2, 8 /), i
i = minloc(m,dim=1)
print *, i !! 3
\end{lstlisting}



Masaru Inatsu
平成18年3月17日