MAXLOC(ARRAY, DIM, MASK, KIND, BACK) 或 MAXLOC(ARRAY, MASK, KIND, BACK)

用途

沿着与掩码的真值相对应的所有元素的最大值的维度,定位数组的第一个元素 Fortran 2008 开始 或最后一个元素 Fortran 2008 结束。 MAXLOC 将使用正整数返回可引用元素位置的索引。

变换函数

参数类型和属性

ARRAY
INTEGERREALCHARACTER 数组。
DIM
INTEGER 标量。 其值必须在 1 ≤ DIM≤n范围内,其中 nARRAY的列组。
MASK (可选)
类型为 LOGICAL 且符合 ARRAY 的自变量的形状。 如果不存在,那么缺省掩码求值为 .TRUE.;即,对整个数组求值。
Fortran 2003 开始KIND(可选)
INTEGER 标量。 与 KIND必须是一个常量表达式。 Fortran 2003 结束
Fortran 2008 开始BACK(可选)
类型为 LOGICAL 的标量,用于控制搜索 ARRAY 的方向。 如果是 .FALSE. 或不存在,那么将从前面搜索数组。 如果是 .TRUE. ,则从末尾开始搜索数组。 Fortran 2008 结束

结果类型和属性

  • Fortran 2003 开始 如果 KINDKIND类型参数由 KIND;否则, KIND类型参数为默认的整数类型。 Fortran 2003 结束
  • 如果 DIM 不存在,那么 result 是列组 1 的整数数组,其大小等于 ARRAY的列组。 如果存在 DIM ,那么 result 是列组的整数数组 (ARRAY) -1 ,并且形状为 (s1, ... , sDIM-1, sDIM + 1, ... , sn) ,其中 n 是 ARRAY的列组。
  • 如果没有最大值,可能是因为数组大小为零,或者掩码数组具有所有 .FALSE. 值,或者没有 DIM 参数,那么返回值是大小为零的一维实体。 如果存在 DIM ,那么结果形状取决于 ARRAY的排名。

结果值

result 指示 ARRAY的最大掩码元素的位置的下标。 如果 ARRAY 的类型为字符,那么将使用 ASCII 整理顺序进行比较。 Fortran 2008 开始 如果多个元素与该最大值相等,且 BACK不存在或值为 .FALSE. ,则函数按数组元素顺序查找第一个元素的位置。 如果 BACK 与值 .TRUE.一起存在,那么该函数将按数组元素顺序查找最后一个元素的位置。 Fortran 2008 结束 如果 DIM则结果会显示维度中每个向量上的最大掩码元素的位置。

由于 DIMMASK 都是可选的,因此可以使用各种自变量组合。 当使用两个参数指定 -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) 是以列优先的顺序中的第一个。
Fortran 2008 开始 求A中最后一个最大元素:
RES = MAXLOC(A, BACK = .TRUE.)
结果为 | 3 4 | 因为最大值 9 位于 A(3, 4)。 虽然还有其他最大值的例子,但A(3, 4)是列中最后一个。 Fortran 2008 结束
要查找 A 中每个列中小于 7 的第一个最大元素:
RES = MAXLOC(A, DIM = 1, MASK = A .LT. 7)
结果为 | 1 3 4 2 | ,因为这些是在每个列中小于 7 的第一个最大值的相应行位置 ( 值为 4、5、5、5)。
Fortran 2008 开始 在A的每一列中,找出最后一个小于7的最大元素:
RES = MAXLOC(A, DIM = 1, MASK = A .LT. 7, BACK = .TRUE.)
结果为 | 1 4 4 2 | ,因为这些是在每个列中小于 7 的最后一个最大值的相应行位置 ( 值为 4、5、5、5)。Fortran 2008 结束
无论定义的数组上下界如何,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)