Ricerca…


Osservazioni

Molte delle procedure intrinseche disponibili hanno in comune tipi di argomenti. Per esempio:

  • un argomento logico MASK che seleziona elementi di matrici di input da elaborare
  • un argomento scalare intero KIND che determina il tipo di risultato della funzione
  • un argomento intero DIM per una funzione di riduzione che controlla la dimensione su cui viene eseguita la riduzione

Usando PACK per selezionare elementi che soddisfano una condizione

La funzione del pack intrinseco racchiude una matrice in un vettore, selezionando gli elementi in base a una determinata maschera. La funzione ha due forme

PACK(array, mask)
PACK(array, mask, vector)

(cioè, l'argomento vector è facoltativo).

In entrambi i casi la array è una matrice e una mask di tipo logico e conforme array (uno scalare o una matrice della stessa forma).

Nel primo caso il risultato è un array di tipo 1 di tipo e parametri di tipo di array con il numero di elementi che rappresenta il numero di elementi reali nella maschera.

integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)

risultati in positive_values come matrice [2, 3, 5] .

Con l'argomento vector rank-1 presente il risultato è ora la dimensione del vector (che deve avere almeno tanti elementi quanti sono i veri valori nella mask .

L'effetto con vector è restituire quella matrice con gli elementi iniziali di quella matrice sovrascritta dagli elementi mascherati array . Per esempio

integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])

Risultati in positive_values essendo la matrice [2,3,5,40,50] .

Va notato che, indipendentemente dalla forma array degli argomenti, il risultato è sempre un array di rank-1.


Oltre a selezionare gli elementi di un array che soddisfano una condizione di mascheramento, è spesso utile determinare gli indici per i quali viene soddisfatta la condizione di mascheramento. Questo linguaggio comune può essere espresso come

integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)

risultando negli indices l'array [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow