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
MASKque selecciona elementos de las matrices de entrada para ser procesados - un argumento escalar entero
KINDque determina el tipo de resultado de la función - un argumento entero
DIMpara 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] .