Fortran-90-rank mismatch in dem Versuch zu extrahieren, die einen Vektor aus einem array
In meinem Fortran 90 code, ich habe das folgende array (genannt array) von ganzen zahlen:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
Möchte ich extrahieren Sie die erste Spalte ein, und speichern Sie es in einem vier-element-Vektor genannt Zeit. Ich habe den folgenden code:
PROGRAM test
IMPLICIT NONE
INTEGER, PARAMETER :: numrows=4, numcols=10
INTEGER :: i, j, k
INTEGER, DIMENSION(:,:), ALLOCATABLE :: array, time
ALLOCATE(array(numrows,numcols))
ALLOCATE(time(numrows))
k=1
DO i=1,numrows
DO j=1,numcols
array(i,j)=k
k=k+1
END DO
END DO
DO i=1,numrows
WRITE(*,"(100(3X,I3))") (array(i,j), j=1,numcols)
END DO
time=array(:,1)
END PROGRAM test
Aber, bekomme ich die folgende Fehlermeldung (beim kompilieren in gfortran):
test.f90:8.15:
ALLOCATE(time(numrows))
1
Error: Rank mismatch in array reference at (1) (1/2)
test.f90:22.2:
time=array(:,1)
1
Error: Incompatible ranks 2 and 1 in assignment at (1)
Warum ist das der Fall? Die Fehlermeldung scheint darauf hinzudeuten, dass das array array(:,1)
ist der Rang 2 nicht Rang 1. Gibt es irgendeine Möglichkeit, dass ich konvertieren array(:,1)
auf ein array von Rang 1? Brauche ich RESHAPE
irgendwie squeeze-array? Oder ist das problem, dass durch die Verwendung array(:,1)
ich bin Angabe eines Spalten-Vektor, eher als ein zeilenvektor? Ich danke Ihnen sehr für Ihre Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben Sie ein Rang-2 belegbar array namens Zeit:
und dann versuchen, weisen Sie ihn wie ein Rang-1-array:
-- tun Sie das nicht. Das funktioniert einwandfrei: