MAXLOC(ARRAY, DIM, MASK, KIND, BACK) または MAXLOC(ARRAY, MASK, KIND, BACK)
目的
配列内のある次元で、マスク内の対応する値が真になっているすべてのエレメントのうちの最大値を持つ最初のエレメント、
または最後のエレメント
を見つけます。MAXLOC は、
正整数を使用して、そのエレメントの位置を参照できる指標を戻します。
クラス
変換関数
引数型および属性
- ARRAY
- INTEGER、REAL、または CHARACTER 配列
- DIM
- INTEGER スカラー。その値は、1≤DIM≤n の範囲内でなければなりません。ここで n は ARRAY のランクです。
- MASK (オプション)
- 型 LOGICAL の引数で、形状は ARRAY に合致します。 これが 指定されていない場合、デフォルトのマスク評価は .TRUE. です。つまり、配列全体が 評価の対象になります。
KIND (オプション)- INTEGER スカラー。KIND に対応する実引数は、定数式である必要があります。

BACK (オプション)- 型 LOGICAL のスカラーで、ARRAY が検索される向きを制御します。
これが .FALSE. であるか、または存在しない場合、配列は先頭から検索されます。
.TRUE. である場合、配列は末尾から検索されます。

結果型および属性
KIND が指定されている場合、KIND 型パラメーターは KIND の値で指定されたものです。それ以外の場合、KIND 型パラメーターは、デフォルト整数型のものです。
- DIM が指定されていない場合、結果は、ARRAY の 階数と同じサイズの、階数 1 の整数配列です。DIM が指定されている場合、 結果は、階数が rank(ARRAY)-1 の整数配列であり、ARRAY の階数を n とすると、 形状は (s1, …, sDIM-1, sDIM+1, …, sn) になります。
- 最大値がない場合 (おそらく、配列がゼロ・サイズであるか、 マスク配列がすべて .FALSE. 値になっているか、DIM 引数がないことが原因です)、 戻り値は、ゼロ・サイズの 1 次元のエンティティーです。DIM が 指定されている場合、結果の形状は、ARRAY の階数に基づきます。
結果値
結果は、ARRAY のマスクされた
エレメントのうち最大のエレメントの位置の添え字を示します。ARRAY が文字型の場合、比較は ASCII 照合シーケンスを使用して行われます。
複数のエレメントがこの最大値と等しく、BACK が存在していないかまたは値 .FALSE. がある場合、この関数は配列エレメント順序の最初のエレメントの場所を検出します。
BACK が値 .TRUE. が指定されて存在する場合、この関数は配列エレメント順序の最後のエレメントの場所を検出します。
DIM が指定されている場合、結果は、その次元の各ベクトルのうち、マスクされた最大エレメントの場所を示します。
DIM と MASK はどちらもオプションなので、
引数のさまざまな組み合わせが可能です。-qintlog オプション
が 2 つの引数と共に指定されている場合、2 番目の引数は、次のいずれかを指します。
- 整数型、論理型、バイト型、または型なしの配列であれば、MASK
- 整数型、バイト型、または型なしのスカラーであれば、DIM
- 論理型スカラーであれば、MASK
例
! A is the array | 4 9 8 -7 |
! | 2 1 -1 5 |
! | 9 5 -1 9 |
! | -7 5 5 -7 |
A の最初の最大のエレメントを検出するには、次のようにします。
RES = MAXLOC(A)
最大値 9 が A(3, 1) にあるので、結果は | 3 1 | です。
最大値の他のインスタンスも存在していますが、A(3, 1) は桁の大きい順で最初のものです。
A の最後の最大のエレメントを検出するには、次のようにします。
RES = MAXLOC(A, BACK = .TRUE.)
最大値 9 が A(3, 4) にあるので、結果は | 3 4 | です。
最大値の他のインスタンスも存在していますが、A(3, 4) は桁の大きい順で最後のものです。
A の各列内の 7 より小さい最初の最大エレメントを見つけるには、以下のようにします。
RES = MAXLOC(A, DIM = 1, MASK = A .LT. 7)
結果は | 1 3 4 2 | です。これらは各列で 7 より小さい (値 4、5、5、5 の) 最初の最大値の対応する行位置であるためです。
A の各列の 7 より小さい最後の最大エレメントを検出するには、次のようにします。
RES = MAXLOC(A, DIM = 1, MASK = A .LT. 7, BACK = .TRUE.)
結果は | 1 4 4 2 | です。これらは各列で 7 より小さい (値 4、5、5、5 の) 最後の最大値の対応する行位置であるためです。
配列に定義された上限および下限に関係なく、MAXLOC は、
下限指標を '1' と決めます。MAXLOC と MINLOC 指標は両方とも正の整数
を使用します。実際の指標を検出するには、次のようにします。
INTEGER B(-100:100)
! Maxloc views the bounds as (1:201)
! If the largest element is located at index '-49'
I = MAXLOC(B)
! Will return the index '52'
! To return the exact index for the largest element, insert:
INDEX = LBOUND(B) - 1 + I
! Which is: INDEX = (-100) - 1 + 52 = (-49)
PRINT*, B(INDEX)