Fortran
Procedimientos intrínsecos
Buscar..
Observaciones
Muchos de los procedimientos intrínsecos disponibles tienen tipos de argumentos en común. Por ejemplo:
- un argumento lógico
MASK
que selecciona elementos de las matrices de entrada para ser procesados - un argumento escalar entero
KIND
que determina el tipo de resultado de la función - un argumento entero
DIM
para una función de reducción que controla la dimensión sobre la que se realiza la reducción
Uso de PACK para seleccionar elementos que cumplan una condición
La función de pack
intrínseco pack
una matriz en un vector, seleccionando elementos basados en una máscara dada. La función tiene dos formas.
PACK(array, mask)
PACK(array, mask, vector)
(Es decir, el argumento del vector
es opcional).
En ambos casos, la array
es una matriz, y una mask
de tipo lógico y compatible con la array
(ya sea un escalar o una matriz de la misma forma).
En el primer caso, el resultado es una matriz de rango 1 de tipo y los parámetros de tipo de array
con el número de elementos siendo el número de elementos verdaderos en la máscara.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
resulta en positive_values
siendo la matriz [2, 3, 5]
.
Con el argumento vector
rango-1 presente, el resultado ahora es el tamaño del vector
(que debe tener al menos tantos elementos como valores reales en la mask
.
El efecto con vector
es devolver esa matriz con los elementos iniciales de esa matriz sobrescritos por los elementos enmascarados de la array
. Por ejemplo
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
resulta en [2,3,5,40,50]
positive_values
siendo la matriz [2,3,5,40,50]
.
Se debe tener en cuenta que, independientemente de la forma de la array
argumentos, el resultado es siempre una matriz de rango 1.
Además de seleccionar los elementos de una matriz que cumplen una condición de enmascaramiento, a menudo es útil determinar los índices para los cuales se cumple la condición de enmascaramiento. Este lenguaje común se puede expresar como
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
dando como resultado indices
son la matriz [1,3,5]
.