Modyfikowanie tablicy 3D z użyciem „spread” w Fortran

głosy
0

Próbuję użyć wewnętrznej funkcji rozprzestrzeniania Fortran, aby zmodyfikować tablicę 3D. I chce zmienić układ kształtu (3 3 6) w kształcie tablicy 3 18 (18). W programie MATLAB można to zrobić za pomocą repmat, ale próbuje to w Fortran skutkuje w błąd: „niezgodne szeregi 3 i 4”.

Nie mam problemu rozprzestrzeniania do stosowania tablic 1D i wszystko działa zgodnie z oczekiwaniami. Moja próba była w użyciu rozprzestrzeniania się w granicach pierwszego kroku, aby osiągnąć kształt (3 18 6) a następnie drugi spread (3 18 18), ale błąd pojawia się już w granicach pierwszego wezwania spreadu.

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)

Spodziewam i tablicą kształtu (3 18 6) w danym kodem i chcieliby uzyskać to (3 18 18) w następnym kroku, tak jak funkcja Matlab „repmat”, który może to zrobić w jednym kroku na przykładzie kodu podane w komentowanym powyższym kodzie. Komunikat o błędzie mówi: „niezgodne szeregi 3 i 4”.

Utwórz 10/10/2019 o 00:45
źródło użytkownik
W innych językach...                            

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