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] .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow