Modifikaci 3D pole pomocí „rozšíření“ v Fortran

hlasů
0

Snažím se používat Fortran své vnitřní funkce šíření upravit 3D pole. Chci změnit pole tvaru (3 3 6) na matici tvaru (3 18 18). V MATLABu to lze provést pomocí repmat, ale snažil to v FORTRAN vede v chybě: „nekompatibilní řady 3 a 4“.

Nemám problém použití rozšíření do 1D pole a vše funguje, jak se očekávalo. Můj pokus byl pouze šíření v Frist krok k dosažení tvaru (3 18 6) a pak druhou spread (3 18 18), ale zdá se, již došlo k chybě při volání Frist šíření.

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)

Myslím, že i řada tvaru (3 18 6) v daném kódu a chtěli se dostat to (3 18 18) v dalším kroku, stejně jako funkce MATLAB „repmat“, což lze provést v jednom kroku na příkladu kódu uveden v komentovaného kódu výše. Chybová zpráva říká: „nekompatibilní řady 3 a 4“.

Položena 10/10/2019 v 00:45
zdroj uživatelem
V jiných jazycích...                            

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