位置:首页 > 高级语言 > Fortran在线教程 > Fortran重塑函数

Fortran重塑函数

下表描述了重塑函数:

函数 描述
reshape(source, shape, pad, order) 它构造一个特定形状的形状,从一个给定source阵列中的元素开始的数组。如果垫不包含则soure的尺寸必须至少为产物(形状)。如果pad包括在内,它必须具有相同的类型的soure。如果order被包括,它必须使用相同的形状的形状的整数数组,值必须是一个排列(1,2,3,...,n),其中n是在形状要素的数量,它必须小于或等于7。

示例

下面的例子演示了这一概念:

program arrayReshape
implicit none

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

   real, dimension (1:9) :: b = (/ 21, 22, 23, 24, 25, 26, 27, 28, 29 /)
   real, dimension (1:3, 1:3) :: c, d, e
   real, dimension (1:4, 1:4) :: f, g, h

   integer, dimension (1:2) :: order1 = (/ 1, 2 /)
   integer, dimension (1:2) :: order2 = (/ 2, 1 /)
   real, dimension (1:16) :: pad1 = (/ -1, -2, -3, -4, -5, -6, -7, -8, &
                                 & -9, -10, -11, -12, -13, -14, -15, -16 /)

   c = reshape( b, (/ 3, 3 /) )
   call write_matrix(c)

   d = reshape( b, (/ 3, 3 /), order = order1)
   call write_matrix(d)

   e = reshape( b, (/ 3, 3 /), order = order2)
   call write_matrix(e)

   f = reshape( b, (/ 4, 4 /), pad = pad1)
   call write_matrix(f)

   g = reshape( b, (/ 4, 4 /), pad = pad1, order = order1)
   call write_matrix(g)

   h = reshape( b, (/ 4, 4 /), pad = pad1, order = order2)
   call write_matrix(h)

end program arrayReshape


subroutine write_matrix(a)
   real, 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

当上述代码被编译和执行时,它产生了以下结果:

21.0000000  24.0000000  27.0000000    
22.0000000  25.0000000  28.0000000    
23.0000000  26.0000000  29.0000000    

21.0000000  24.0000000  27.0000000    
22.0000000  25.0000000  28.0000000    
23.0000000  26.0000000  29.0000000    

21.0000000  22.0000000  23.0000000    
24.0000000  25.0000000  26.0000000    
27.0000000  28.0000000  29.0000000    

21.0000000  25.0000000  29.0000000   -4.00000000    
22.0000000  26.0000000  -1.00000000  -5.00000000    
23.0000000  27.0000000  -2.00000000  -6.00000000    
24.0000000  28.0000000  -3.00000000  -7.00000000    

21.0000000  25.0000000  29.0000000   -4.00000000    
22.0000000  26.0000000  -1.00000000  -5.00000000    
23.0000000  27.0000000  -2.00000000  -6.00000000    
24.0000000  28.0000000  -3.00000000  -7.00000000    

21.0000000  22.0000000  23.0000000   24.0000000    
25.0000000  26.0000000  27.0000000   28.0000000    
29.0000000  -1.00000000 -2.00000000  -3.00000000    
-4.00000000 -5.00000000 -6.00000000  -7.00000000