Modifica matrice 3D utilizzando "spread" in FORTRAN

voti
0

Sto cercando di usare intrinseca funzione di diffusione del Fortran per modificare una matrice 3D. Voglio cambiare una matrice della forma (3 3 6) in una matrice di forma (3 18 18). In MATLAB questo può essere fatto utilizzando repmat, ma provare questo nei risultati FORTRAN nel l'errore: ranghi incompatibili 3 e 4.

Non ho alcun problema applicando spread array 1D e tutto funziona come previsto. Il mio tentativo era di usare diffusione in una fase di frist per ottenere una forma di (3 18 6) e poi una seconda spread per (3 18 18), ma l'errore appare già alla chiamata di frist di diffusione.

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)

Mi aspetto e la matrice di forma (3 18 6) nel codice dato e desidero ottenere a (3 18 18) nel passaggio successivo, proprio come la funzione MATLAB repmat che può fare questo in un solo passo dall'esempio di codice data nel codice commentato sopra. Il messaggio di errore dice: ranghi incompatibili 3 e 4.

È pubblicato 10/10/2019 alle 00:45
fonte dall'utente
In altre lingue...                            

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