Modifisere 3D array ved hjelp av "spredning" i Fortran

stemmer
0

Jeg prøver å bruke Fortran iboende funksjon spredning å endre en 3D array. Jeg ønsker å endre en matrise av formen (3 3 6) til en oppstilling av form (3 18 18). I MATLAB kan dette gjøres ved hjelp repmat, men prøver dette i Fortran resultater i i feil: uforenlige rekkene 3 og 4.

Jeg har ikke noe problem å bruke spredte seg til 1D arrays og alt fungerer som forventet. Mine forsøk var å bruke spredt i en frist trinn for å oppnå en form av (3 18 6) og deretter en andre spredning for (3 18 18), men feilen skulle oppstå allerede på frist ring av spredning.

program example
  implicit none
  integer :: arr(3,3,6)
  integer :: arr2(3,18,6)
  integer :: i,j

  do i = 1,6
    do j = 1,3
        arr(1:3,j,i) = (/1,1,1/)
    end do
  end do

  arr2 = spread(arr,2,6)
  print*, shape(arr2)

end program example

!MATLAB code:
!repmat(arr, 1, 6, 3)

Jeg forventer og rekke form (3 18 6) i den gitte koden og ønsker å få dette til (3 18 18) i neste trinn akkurat som Matlab-funksjonen repmat, som kan gjøre dette i ett trinn ved kodeeksempel gitt i den kommenkoden ovenfor. Feilmeldingen sier: inkompatible rekkene 3 og 4.

Publisert på 09/10/2019 klokken 23:45
kilden bruker
På andre språk...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more