Sök…


Anmärkningar

Många av de tillgängliga inneboende procedurerna har gemensamma argumenttyper. Till exempel:

  • ett logiskt argument MASK som väljer element i inputmatriser som ska behandlas
  • ett heltalskalarargument KIND som bestämmer typen av funktionsresultat
  • ett heltalargument DIM för en reduktionsfunktion som styr den dimension som reduktionen utförs över

Använd PACK för att välja element som uppfyller ett villkor

Den inre pack packar en matris i en vektor och väljer element baserade på en given mask. Funktionen har två former

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

(det vill säga vector är valfritt).

I båda fallen är array en matris och en mask av logisk typ och kan anpassas till array (antingen en skalär eller en matris med samma form).

I det första fallet är resultatet rank-1 array av typ- och typparametrar av array med antalet element som är antalet sanna element i masken.

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

resulterar i positive_values värden som arrayen [2, 3, 5] .

Med vector rank-1-argumentet närvarande är resultatet nu storleken på vector (som måste ha minst lika många element som det finns sanna värden i mask .

Effekten med vector är att returnera den arrayen med de initiala elementen i den arrayen som skrivs över av de maskerade elementen i array . Till exempel

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

resulterar i positive_values [2,3,5,40,50] arrayen [2,3,5,40,50] .

Det bör noteras att, oberoende av formen av argumentet array resultatet är alltid en rang-1 matris.


Förutom att välja elementen i en matris som uppfyller ett maskeringsvillkor är det ofta användbart att bestämma de index för vilka maskeringsvillkoret uppfylls. Detta vanliga formspråk kan uttryckas som

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

vilket resulterade i att indices är matrisen [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow