Ich versuche ein logisches Array (B) für die logische Indizierung basierend auf Werten zwischen .1 und .999 in einem Array (EP_G2) mit ein paar verschiedenen Methoden zu erstellen 1) wo Schleife 2) ANY.Logische Indizierung basierend auf "find" in Fortran 90
program flux_3d
implicit none
INTEGER :: RMAX, YMAX, ZMAZ, timesteps
DOUBLE PRECISION, PARAMETER :: pmin=0.1
DOUBLE PRECISION, PARAMETER :: pmax=0.999
INTEGER :: sz
DOUBLE PRECISION, ALLOCATABLE :: EP_G2(:,:), C(:)
INTEGER, DIMENSION(RMAX*ZMAX*YMAX) :: B
LOGICAL, DIMENSION(RMAX*ZMAX*YMAX) :: A
! dimensions of array,
RMAX = 540
YMAX = 204
ZMAX = 54
timesteps = 1
!Open ascii array
OPEN(100, FILE ='EP_G2', form = 'formatted')
ALLOCATE(EP_G2(RMAX*ZMAX*YMAX, timesteps))
READ(100, *) EP_G2
WHERE(pmin<EP_G2(:,timesteps)<pmax) B = 1
ELSEWHERE
B = 0
ENDWHERE
PRINT*, B
! SZ # OF POINTS IN B
sz = count(B.eq.1)
!alternate way of finding points between pmin and pmax
A = ANY(pmin<EP_G2(:,t)<pmax)
print*, sz
!Then use the logical matrix B (or A) to make new array
!Basically I want a new array that isolates just the points in array between
!pmin and pmax
ALLOCATE(C(sz))
C = EP_G2(LOGICAL(B), 1)
Die Frage, die ich bekommen habe ist, dass ich entweder das gesamte Array oder nichts bekommen und den Befehl LOGISCH (B) bekommt einen Fehler, dass es nicht die richtige Art ist. Ich bin neu in Fortran, komme aus Matlab, wo ich nur finden würde. Da dieses Array über 5.948.640 x 1 Rechenzeit ist ein Problem. Ich benutze den Intel Fortran Compiler (15.0 glaube ich).
Grundsätzlich suche ich nach dem schnellsten Weg, um die Indizes von Punkten in einem Array zwischen zwei Zahlen zu finden.
Jede Hilfe wäre sehr willkommen.
Nur um die Frage zu klären. Sie haben eine Reihe von 'DOUBLE PRECISION :: EP_G2'. Sie möchten ein zweites Array, "DOUBLE PRECISION :: C", das nur die Werte in einem bestimmten Bereich enthält. Ist das korrekt? Müssen Sie auch die Indizes dieser Nummern in 'EP_G2' speichern? – Jack
Ja. Ich suche, um die Werte in einem Array UND die Indizes in einem separaten Array zu speichern. – akimbo