Suche…


Bemerkungen

Viele der verfügbaren intrinsischen Prozeduren haben gemeinsame Argumenttypen. Zum Beispiel:

  • ein logisches Argument MASK das Elemente von Eingabearrays zur Verarbeitung auswählt
  • ein ganzzahliges Skalarargument KIND das die Art des Funktionsergebnisses bestimmt
  • ein ganzzahliges Argument DIM für eine Reduktionsfunktion, das die Dimension steuert, über die die Reduktion ausgeführt wird

Verwenden von PACK zum Auswählen von Elementen, die eine Bedingung erfüllen

Die intrinsische pack packt ein Array in einen Vektor und wählt Elemente basierend auf einer gegebenen Maske aus. Die Funktion hat zwei Formen

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

(Das vector ist also optional).

In beiden Fällen ist array ein Array und eine mask mit logischem Typ und mit array (entweder ein Skalar oder ein Array mit derselben Form) kompatibel.

Im ersten Fall ist das Ergebnis ein Rang-1-Array von Typ- und Typparametern des array wobei die Anzahl der Elemente die Anzahl der wahren Elemente in der Maske ist.

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

führt dazu, dass positive_values das Array sind [2, 3, 5] .

Wenn das Argument vector Rank-1 vorhanden ist, ist das Ergebnis jetzt die Größe des vector (wobei mindestens zwei Elemente so viele Elemente enthalten müssen, wie echte Werte in der mask .

Der Effekt von vector besteht darin, dieses Array mit den ursprünglichen Elementen dieses Arrays zurückzugeben, die von den maskierten Elementen des array überschrieben werden. Zum Beispiel

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

ergibt positive_values Werte als Array [2,3,5,40,50] .

Es ist zu beachten, dass das Ergebnis unabhängig von der Form des Argument- array immer ein Rang-1-Array ist.


Neben der Auswahl der Elemente eines Arrays, die eine Maskierungsbedingung erfüllen, ist es häufig nützlich, die Indizes zu bestimmen, für die die Maskierungsbedingung erfüllt ist. Diese gebräuchliche Redewendung kann ausgedrückt werden als

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

was dazu führt, dass indices das Array sind [1,3,5] .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow