Fortran - 操作函数



操作函数是移位函数。移位函数返回数组形状不变,但移动元素。

序号 函数和描述
1

cshift(array, shift, dim)

它执行循环移位,如果 shift 为正则向左移动 shift 个位置,如果 shift 为负则向右移动。如果 array 是向量,则以自然方式进行移位;如果它是更高秩的数组,则沿维度 dim 的所有部分进行移位。如果省略 dim,则将其视为 1;在其他情况下,它必须是 1 到 n 之间的标量整数(其中 n 等于 array 的秩)。参数 shift 是标量整数或秩为 n-1 的整数数组,其形状与数组相同,但沿维度 dim 除外(由于秩较低而被移除)。因此,不同的部分可以朝不同的方向和不同的位置数量进行移位。

2

eoshift(array, shift, boundary, dim)

它是端部移位。如果 shift 为正,则执行向左移位;如果 shift 为负,则执行向右移位。代替移出的元素,从 boundary 中获取新元素。如果 array 是向量,则以自然方式进行移位;如果它是更高秩的数组,则所有部分的移位沿维度 dim 进行。如果省略 dim,则将其视为 1;在其他情况下,它必须具有 1 到 n 之间的标量整数值(其中 n 等于 array 的秩)。参数 shift 是标量整数(如果 array 的秩为 1),否则它可以是标量整数或秩为 n-1 的整数数组,其形状与数组 array 相同,但沿维度 dim 除外(由于秩较低而被移除)。

3

transpose (matrix)

它转置矩阵,矩阵是秩为 2 的数组。它替换矩阵中的行和列。

示例

以下示例演示了该概念:

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

编译并执行上述代码后,将产生以下结果:

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

示例

以下示例演示了矩阵的转置:

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

编译并执行上述代码后,将产生以下结果:

Matrix Transpose: A Matrix

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

1  2  3
1  2  3
1  2  3
fortran_arrays.htm
广告