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.,则从末尾开始搜索数组。
结果类型和属性
如果 KINDKIND类型参数由 KIND;否则, KIND类型参数为默认的整数类型。 
- 如果 DIM 不存在,那么 result 是列组 1 的整数数组,其大小等于 ARRAY的列组。 如果存在 DIM ,那么 result 是列组的整数数组 (ARRAY) -1 ,并且形状为 (s1, ... , sDIM-1, sDIM + 1, ... , sn) ,其中 n 是 ARRAY的列组。
- 如果没有最大值,可能是因为数组大小为零,或者掩码数组具有所有
.FALSE.值,或者没有 DIM 参数,那么返回值是大小为零的一维实体。 如果存在 DIM ,那么结果形状取决于 ARRAY的排名。
结果值
result 指示 ARRAY的最大掩码元素的位置的下标。 如果 ARRAY 的类型为字符,那么将使用 ASCII 整理顺序进行比较。
如果多个元素与该最大值相等,且 BACK不存在或值为 .FALSE. ,则函数按数组元素顺序查找第一个元素的位置。 如果 BACK 与值 .TRUE.一起存在,那么该函数将按数组元素顺序查找最后一个元素的位置。
如果 DIM, 则结果会显示维度中每个向量上的最大掩码元素的位置。
由于 DIM 和 MASK 都是可选的,因此可以使用各种自变量组合。 当使用两个参数指定 -qintlog 选项时,第二个参数引用下列其中一项:
- MASK (如果它是整数,逻辑,字节或无类型的数组)
- DIM (如果它是整数,字节或无类型的标量)
- MASK (如果它是逻辑类型的标量)
添加 DIM 参数会修改 XL Fortran Version 3 中的行为。
示例
! A is the array | 4 9 8 -7 |
! | 2 1 -1 5 |
! | 9 5 -1 9 |
! | -7 5 5 -7 |
要查找 A 的第一个最大元素:
RES = MAXLOC(A)结果为 | 3 1 | 因为最小值 9 位于 A(3, 1)。 虽然存在其他最大值的实例,但 A(3, 1) 是以列优先的顺序中的第一个。
求A中最后一个最大元素:RES = MAXLOC(A, BACK = .TRUE.)结果为 | 3 4 | 因为最大值 9 位于 A(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)