Fortran - Fonctions de manipulation

Les fonctions de manipulation sont des fonctions de décalage. Les fonctions de décalage renvoient la forme d'un tableau inchangé, mais déplacent les éléments.

Sr.Non Description de la fonction
1

cshift(array, shift, dim)

Il effectue un décalage circulaire en décalant les positions vers la gauche, si le décalage est positif et vers la droite s'il est négatif. Si le tableau est un vecteur, le décalage est effectué de manière naturelle, s'il s'agit d'un tableau d'un rang supérieur, le décalage est dans toutes les sections le long de la dimension dim. Si dim est absent, il est considéré comme égal à 1, dans d'autres cas, il doit s'agir d'un nombre entier scalaire compris entre 1 et n (où n est égal au rang du tableau). L'argument shift est un entier scalaire ou un tableau d'entiers de rang n-1 et de la même forme que le tableau, sauf le long de la dimension dim (qui est supprimée en raison du rang inférieur). Différentes sections peuvent donc être décalées dans différentes directions et avec différents nombres de positions.

2

eoshift(array, shift, boundary, dim)

C'est un changement de fin. Il effectue un décalage vers la gauche si le décalage est positif et vers la droite s'il est négatif. Au lieu des éléments déplacés, de nouveaux éléments sont extraits de la frontière. Si le tableau est un vecteur, le décalage est effectué de manière naturelle, s'il s'agit d'un tableau d'un rang supérieur, le décalage sur toutes les sections est le long de la dimension dim. si dim est manquant, il est considéré comme égal à 1, dans d'autres cas, il doit avoir une valeur entière scalaire comprise entre 1 et n (où n est égal au rang du tableau). L'argument shift est un entier scalaire si le tableau a le rang 1, dans l'autre cas il peut être un entier scalaire ou un tableau d'entiers de rang n-1 et avec la même forme que le tableau du tableau sauf le long de la dimension dim (qui est supprimée en raison du rang inférieur).

3

transpose (matrix)

Il transpose une matrice, qui est un tableau de rang 2. Il remplace les lignes et les colonnes de la matrice.

Exemple

L'exemple suivant illustre le concept -

program arrayShift
implicit none

   real, dimension(1:6) :: a = (/ 21.0, 22.0, 23.0, 24.0, 25.0, 26.0 /)
   real, dimension(1:6) :: x, y
   write(*,10) a
   
   x = cshift ( a, shift = 2)
   write(*,10) x
   
   y = cshift (a, shift = -2)
   write(*,10) y
   
   x = eoshift ( a, shift = 2)
   write(*,10) x
   
   y = eoshift ( a, shift = -2)
   write(*,10) y
   
   10 format(1x,6f6.1)

end program arrayShift

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

21.0  22.0  23.0  24.0  25.0  26.0
23.0  24.0  25.0  26.0  21.0  22.0
25.0  26.0  21.0  22.0  23.0  24.0
23.0  24.0  25.0  26.0   0.0   0.0
0.0    0.0  21.0  22.0  23.0  24.0

Exemple

L'exemple suivant montre la transposition d'une matrice -

program matrixTranspose
implicit none

   interface
      subroutine write_matrix(a)
         integer, dimension(:,:) :: a
      end subroutine write_matrix
   end interface

   integer, dimension(3,3) :: a, b
   integer :: i, j
    
   do i = 1, 3
      do j = 1, 3
         a(i, j) = i
      end do
   end do
   
   print *, 'Matrix Transpose: A Matrix'
   
   call write_matrix(a)
   b = transpose(a)
   print *, 'Transposed Matrix:'
   
   call write_matrix(b)
end program matrixTranspose


subroutine write_matrix(a)

   integer, dimension(:,:) :: a
   write(*,*)
   
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
   end do
   
end subroutine write_matrix

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Matrix Transpose: A Matrix

1  1  1
2  2  2
3  3  3
Transposed Matrix:

1  2  3
1  2  3
1  2  3